一、逻辑运算
1.布尔运算
通过< , >号判断数组全部值是否符合条件,如是否大于1,大于1会置为True,小于1会置为False
#生成0到1之间,8行10列均匀分布的数组
stock_change = np.random.normal(0,1,(8,10))
#大于0.5的值置为True,否则置为False
stock_change > 0.5
array([[False, False, False, False, False, False, False, False, False,
True],
[False, True, False, False, False, False, False, False, False,
True],
[False, True, False, True, True, True, False, False, True,
False],
[ True, True, False, False, False, False, False, False, False,
False],
[False, False, False, True, False, False, True, False, True,
False],
[False, True, False, False, True, True, True, False, False,
True],
[ True, False, True, True, False, False, False, False, False,
False],
[ True, False, True, True, True, False, False, True, False,
False]])
#将大于0.5的数置为1.1
stock_change[stock_change>0.5]=1.1
2.通用判断函数
np.all(布尔值)
只要有一个False,就返回False;只有全是True才返回True
np.all( stock_change[0:2,0:5]>0)
False
np.any(布尔值)
只要有一个True,就返回True;只有全是False才返回False
np.any( stock_change[0:2,0:5]>0)
True
3.三元运算符
np.where(布尔值,True的位置的值,False的位置的值)
temp = stock_change[:4,:4]
#判断数组中的值是否大于0,是置于1,否置为0
np.where(temp>0,1,0)
array([[0, 1, 0, 1],
[0, 1, 1, 0],
[1, 1, 0, 1],
[1, 1, 0, 0]])
复合逻辑运算
np.logical_and( ) 与运算
np.logical_or( ) 或运算
#挑选大于0.5并且小于1的数
np.logical_and(temp>0.5,temp<1)
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False]])
#挑选大于0.5或小于1的数
np.logical_or(temp>0.5,temp<1)
array([[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True]])
二、统计运算
1.统计指标函数
常见函数min、max、mean(平均值)、median(中位数)、var(方差)、std(标准差)
#调用方法
#1.temp.max(1)
#2.np.max(temp,0)
#1表示按行,0表示按列
temp
array([[-0.64249698, 0.20527198, -0.25116011, 0.21976393],
[-1.03996567, 1.1 , 0.37277963, -0.57377565],
[ 0.29487292, 1.1 , -1.39841772, 1.1 ],
[ 1.1 , 1.1 , -1.18514356, -0.11440521]])
#按列寻找最大值
temp.max(0)
array([1.1 , 1.1 , 0.37277963, 1.1 ])
#按行寻找最大值
temp.max(1)
array([0.21976393, 1.1 , 1.1 , 1.1 ])
2.返回最大值、最小值所在位置
#np.argmax(temp, axis=) 按行:1,按列:0
#np.argmin(temp, axis=)
np.argmax(temp,1)
array([3, 1, 1, 0], dtype=int64)
np.argmin(temp,0)
array([1, 0, 2, 1], dtype=int64)
三、数组间运算
1.数组与数的运算
相当于数组每个数都进行相同的运算
arr1 = np.array([[1,2,3,2,1,4],[5,6,1,2,3,1]])
arr1 + 10
array([[11, 12, 13, 12, 11, 14],
[15, 16, 11, 12, 13, 11]])
2.数组与数组运算
广播机制
方便不同形状的ndarray进行运算
可以运算的情况:
1.维度相等
2.shape 其中对应一个地方为1
3.矩阵运算
3.1矩阵存储方法
1.ndarrary二维数组
data = np.array([[80,86],[82,80]])
array([[80, 86],
[82, 80]])
2.matrix数据结构
np.mat([[80,86],[82,80]])
matrix([[80, 86],
[82, 80]])
3.2矩阵乘法运算
要求:
形状:(m , n) * (n , l)
运算规则:1.ndarray存储
np.matmul(arr1,arr2)
np.dot(arr1,arr2)
2.matrix存储
arr1 * arr2
注:ndarray存储相乘需要满足广播机制
weights_mat
matrix([[0.3],
[0.7]])
data = np.array([[80,86],
[82,80],
[85,78],
[90,90],
[86,82],
[82,90],
[78,80],
[92,94]])
data * weights_mat
matrix([[84.2],
[80.6],
[80.1],
[90. ],
[83.2],
[87.6],
[79.4],
[93.4]])