数据分析学习笔记 —— Numpy
- Numpy的高级索引
Numpy的高级索引类似于zip命令,以二维数组为例,可以将一个二维数组的行索引与列索引分别提取出来,然后将两者映射到一个新的所以并对数组进行提取。
import numpy as np
x = np.array(range(32)).reshape(8,4)
print(x)
print(x[[1,2],[3,2]])
>>>[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
[ 7 10]
如上述代码表示对整个矩阵的[1,3]与[2,2]元素做提取
- Numpy的花式索引
利用np.ix_可以对矩阵提取对应行后再按后面的序列排序,如下面的代码:
import numpy as np
x = np.array(range(32)).reshape(8,4)
print(x)
print(x[np.ix_([2,3,4,5],[2,0,1,3])])
>>>[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
[[10 8 9 11]
[14 12 13 15]
[18 16 17 19]
[22 20 21 23]]
上述代码表示对整个矩阵的2,3,4,5行提取并按2,0,1,3的顺序排列其列。
- 迭代与广播迭代
对一个多维数组进行迭代可以选择行优先模式(order = ‘C’)或者列优先模式(order = ‘F’),以及对整个轴的迭代(flags = ‘[external_loop]’),迭代语法与Python大同小异。
import numpy as np
a = np.array(range(12)).reshape(3,4)
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
for x in np.nditer(a,flags = ['external_loop'],order = 'F'):
print(x)
[0 4 8]
[1 5 9]
[ 2 6 10]
[ 3 7 11]
同样的,对于两个维度不同的数组同时迭代时,广播机制会被自动触发。
import numpy as np
a = np.