基本索引操作
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print arr[2]#第2行的数组
print arr[0][2]#第0行第2列的值
print arr[0, 2] # 普通Python数组不能用,同上
[7 8 9]
3
3
切片操作
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print arr[:]#打印整个3*3数列
print arr[:2]#打印0,1行
print arr[:1, :2]#打印0行,0,1列
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]]
[[1 2]]
布尔型索引
import numpy as np
import numpy.random as np_random
name_arr = np.array(['Bob', 'Joe', 'Will'])
rnd_arr = np_random.randn(3, 3) # 随机3*3数组
print name_arr == 'Bob' # 返回布尔数组,元素等于'Bob'为True,否则False。
print rnd_arr[name_arr == 'Bob'] # 利用布尔数组选择行,第0行
print rnd_arr[name_arr == 'Bob', :2] # 增加限制打印列的范围,第0行 前2列
print rnd_arr[~(name_arr == 'Bob')] # 对布尔数组的内容取反,第1,2列
print rnd_arr[(name_arr == 'Bob') | (name_arr == 'Will')] # 逻辑运算混合结果
rnd_arr[name_arr != 'Joe'] = 7 # 先布尔数组选择行,然后把每行的元素设置为7。
print rnd_arr
[[-0.09102884 -0.09452611 1.42854702]
[ 2.15963354 0.24216261 -2.26044752]
[-0.72741325 -1.085561 0.54600936]]
[ True False False]
[[-0.09102884 -0.09452611 1.42854702]]
[[-0.09102884 -0.09452611]]
[[ 2.15963354 0.24216261 -2.26044752]
[-0.72741325 -1.085561 0.54600936]]
[[-0.09102884 -0.09452611 1.42854702]
[-0.72741325 -1.085561 0.54600936]]
[[ 7. 7. 7. ]
[ 2.15963354 0.24216261 -2.26044752]
[ 7. 7. 7. ]]
花式索引(Fancy indexing)
arr = np_random.randn(3, 3) # 随机3*3数组
print arr
print arr[[1, -1]]# 打印arr[1],a[-1]行
print arr[[0, 1], [0, 1]]#打印a[0, 0],a[1, 1]
print arr[[0, 1]][:, [1, 2]]#打印0,1行的1,2列
print arr[:2, [1,2]]#同上
print arr[np.ix_([0, 1], [1, 2])]#同上,最清楚的写法
[[-0.60100046 -0.16245393 0.04618795]
[-0.05029884 -1.43052367 -0.91403785]
[-1.445763 -1.4240193 -0.79258699]]
[[-0.05029884 -1.43052367 -0.91403785]
[-1.445763 -1.4240193 -0.79258699]]
[-0.60100046 -1.43052367]
[[-0.16245393 0.04618795]
[-1.43052367 -0.91403785]]
[[-0.16245393 0.04618795]
[-1.43052367 -0.91403785]]