索引
使用下标获取数组元素。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
1.获取所有元素
print(arr)
,获取所有元素。
2.获取某一行元素
print(arr[2])
,获取2行的元素。
3.获取某一个元素
print(arr[2][0])
or print(arr[2, 0])
,获取2行0列的元素(即7)。
4.布尔型索引
names = ['a', 'b', 'c']
values = [[1, 2], [2, 3], [4, 5]]
print(names=='b')
print(values[names=='b'])
得到:
可以看出,names=='b'
输出一个布尔型的数组,names数组中等于’b’的元素的位置为True,否则为False。而values[names=='b']
,当values数组的行数与names数组的列数相等时,按照布尔值输出True的行;如果不相等,会报错。
e.g.
print(names!='b')
print(values[~(names=='b')])
得到:
5.花式索引
即利用整数数组进行索引。
arr = np.arange(32).reshape(8, 4)
print(arr)
得到:
(1) print(arr[[1, 3, 5, 7]])
,得到从上往下数1、3、5、7行(即第2、4、6、8行):
(2) print(arr[-1, -3, -5, -7])
,得到从下往上数第1、3、5、7行:
(3) print(arr[[1, 3, 5, 7], [0, 1, -2, 3]])
,得到位于(1,0)、(3,1)、(5,-1)、(7,3)位置的元素一元数组:
(4) print(arr[[1, 3, 5, 7]][:, [0, 3, 1, 2]])
,得到:
第一个[ ]中的
[1, 3, 5, 7]
指向行,第二个[ ]中的:
指向所有列,然后按[0, 3, 1, 2]
的顺序依次取列值。
分片
和列表相似,使用冒号 : 进行分片。
1.批量赋值:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]);
arr[5:8] = 12; #区间为左闭右开
print(arr)
arr[5:8] = [1, 2, 3]
print(arr)
得到:
此处对数组进行的修改都是对其原始数组元素值的修改,numpy数组不另外copy数组副本来应对数据更改。
2.复制数组
arr[x:y].copy()
,复制分片数组;arr.copy()
,复制数组。
3.多维度取值
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
(1)取一个维度的切片:print(arr[:2])
,得到:
(2)多维度切片:print(arr[:2, 1:])
,得到: