本部分主要涉及Numpy中涉及的矩阵运算。
1.判断数组/矩阵中是否存在某元素
vector = numpy.array([5,10,15,20])
vector == 10
#array([False,True,False,False],dtype=bool)
直观的问题是现在只是知道了其是否存在?那是否能拿到这一项呢?
即是否能通过返回的bool值当做索引?答案的肯定的。 如下方的第四行代码
vector = numpy.array([5,10,15,20])
equal_to_ten = (vector == 10)
print equal_to_ten
#[False True False False]
print(vector[equal_to_ten])
#[10] bool类型的一个同长度的数组也可以当做索引
判断条件之间的逻辑运算
与运算
vector = numpy.array([5,10,15,20])
euqal_to_ten_and_five = (vector == 10) & (vector == 5)
print euqal_to_ten_and_five
#[False False False False]
或运算
vector = numpy.array([5,10,15,20])
euqal_to_ten_or_five = (vector == 10) | (vector == 5)
print euqal_to_ten_or_five
#[True True False False]
vector[euqal_to_ten_or_five] = 50
print(vector)
#[50 50 15 20]
2.数据类型变化
利用array.astype函数即可
vector = numpy.array(["1","2","3"])
#S1
print(vector.dtype)
#['1' '2' '3']
print(vector)
vector = vector.astype(float)
#float64
print(vector.dtype)
#[1. 2. 3.]
print(vector)
3.极值、求和等
vector = numpy.array([5,10,15,20])
vector.min()
#内置的一些属性 了解更多的话 print (help(numpy.array))
matrix = numpy.array([
[5,10,15],
[20,25,30],
[35,40,45]
])
#横向加 按行求和
matrix.sum(axis = 1)
#竖向加 按列求和
matrix.sum(axis = 0)
4.矩阵初始化
4.1 arrange reshape
import numpy as np
print (np.arrange(15))
#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
a = np.arrange(15).reshape(3,5)
a
#array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])
a.shape
#(3,5)
a.ndim
#2 指array的维度
a.dtype.name
#int32
a.size
#15
- arrange(n) 初始化一个大小为n 元素为0 - n-1的向量
- reshape函数
- shape ndim size
#array([10,15,20,25])
np.arrange(10,30,5)
除了这种指定间距的方式外,还有一种指定在某一范围上想取的数的个数从而通过平均间距进行取值的方式。 linsapce 值得注意的是此处是左闭右闭的区间
from numpy import pi
#在左闭右闭的区间内按平均间距取100个数
np.linspace(0,2*pi,100)
4.2 zeros ones
#注意传来的是一个元组的格式 float类型
np.zeros((3,4))
#int 类型
np.ones((2,3,4),dtype=np.int32)
4.3 random
用途:后续在机器学习过程中需要进行权重参数的初始化,生成随机数 区间为[-1,1]
np.random.random((2,3))
5.矩阵元素的数学运算
a = np.linspace(20,50,4)
#[20,30,40,50]
b= = np.arrange(4)
#[0,1,2,3]
c=a-b
c=c-1
#平方
b**2
import numpy as np
B = np.arrange(3)
#e的指数
np.exp(B)
#开根号
np.sqrt(B)
6.矩阵运算
6.1 矩阵乘法
A = np.array([
[1,1],
[0,1]
])
B = np.array([
[2,0],
[3,4]
])
#*乘表示对应位置进行相乘 而非传统的矩阵运算
A*B
#矩阵乘法的两种表达方式
A.dot(B)
np.dot(A,B)
6.2 矩阵形状
a = np.floor(10*np.random.random((3,4)))
a.ravel()
a.shape = (6,2)
print(a.T)
- 首先利用random模块中的random函数产生一个3*4的矩阵,取值在-1到1之间,随后乘10,floor函数向下取整
- 将矩阵拉成向量 ravel函数
- 修改为6*2矩阵
- a的转置矩阵
6.3 矩阵拼接
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
#横向拼接 可以理解成同一样本的不同特征保存在了不同的矩阵中 值得注意的是传的也是元组
np.hstack((a,b))
#纵向拼接 相当于多个样本的拼接
np.vstack((a,b))
6.4 矩阵分割
a = np.floor(10*np.random.random(2,12))
#[
#[8 3 3 5 9 0 1 1 6 2 7 2],
#[7 1 9 7 5 2 5 7 0 3 1 1]
#]
#按行分三份切分 每一份为2*4
np.hsplit(a,3)
#按行指定切分 左闭右开 第一行5那里切开
np.hsplit(a,(3,4))
#按列切分 按列切分为两份
np.vsplit(a,2)