Numpy
修改
Numpy有着严格的数据类型,umpy数组类型取决于数组中的每一个元素(和优先级有关,如 int 和 float 类型同时存在,则数组类型为 float。
但是可以使用构造函数 dtype 来指定一个类型
切片
切片操作中,上限元素是不被包含在内的,有着左右之分,正数为左负数为右
a = [1, 2, 3, 4]
print(a[0:3])
结果为
[1, 2, 3]
可以看出 (上限 - 下限 = 结果长度)
还可以进行参数的省略
array[左边位置:右边位置],省略后默认左边从第一个,右边为最后一个
a = [1, 2, 3, 4]
print(a[:2])
print(a[:-3])
结果为
[1, 2]
[1]
可以进行等间隔操作,间隔距离为第三个参数
a = [1, 2, 3, 4]
print(a[::2])
结果为
[1, 3]
在多维数组中,可以在不同维度进行和一维相同的操作,举例
将各种颜色取出来的代码如下
a = np.arange(25).reshape(5, 5)
yellow = a[4, :]
red = a[::, 1::2]
blue = a[1::2,:3:2]
结果为
[20 21 22 23 24]
[[ 1 3]
[ 6 8]
[11 13]
[16 18]
[21 23]]
[[ 5 7]
[15 17]]
切片和索引的区别
索引会导致维度的丢失
切片则会保留维度
a = np.array([1, 3, 4, 5])
print(a[2])
print(a[2:3])
结果
4 //维度丢失了,只剩下一个值
[4] //维度还在,仍旧是一个数组
Fancy Indexing
提供了一种选取数组元素的方式
Eg1
a = np.array([3, -1, -2, 4, -6, 8])
print(a < 0)
Result
[False True True False True False]
Eg2
mask = a < 0
print(a[mask])
Result
[-1 -2 -6]
Eg3
index = [0, 1, 3]
a[index]
Result
array([3, 0, 4])
Fancy Indexing 产生的是数组的一个副本,而切片只是原数组的一个视图
a = np.array([3, -1, -2, 4, -6, 8])
b = a[[0, 1, 2]]
b[b < 0] = 0
print(b)
print(a)
b = a[:3]
b[b < 0] = 0
print(b)
print(a)
Result
[3 0 0]
[ 3 -1 -2 4 -6 8]
[3 0 0]
[ 3 0 0 4 -6 8]
维度表示
新维度永远在第一个,最后一个维度永远是列
计算
元素服从逐元素计算方式
a = np.array([1, 4, 5, 10])
b = np.array([2, 3, 6 ,8])
print(a > b)
print(a + b)
print(a * b)
Result
[False True False True]
[ 3 7 11 18]
[ 2 12 30 80]
axis轴关键字
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
a.sum(axis = 0)
Result
array([ 6, 8, 10, 12])
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
a.sum(axis = 1)
Result
array([10, 26])
a是一个 (2x4) 的矩阵,axis = 0,可以视作丢失第一个维度,所以结果有四个值
同理axis = 1结果有两个值
乘法
矩阵相乘:运算规则同矩阵乘法
向量相乘:点积和