先看一下接下来要总结到的所有的用法的IPython交互记录:
In [1]: importnumpy as np
In [2]: data =np.random.randn(7,8)
In [3]: data
Out[3]:
array([[0.33620879, -0.74760021, 0.21633351,-0.31951527, -0.3474147 ,
0.594967 , 1.4092629 , -2.24377178],
[ 0.25622154, -0.89852356, -0.22030082,-1.17275295, 0.56562225,
0.99170359, -1.15174814, -1.29151643],
[ 1.17473982, -0.62461077, 1.45672663, -1.11564103, 0.26553946,
0.35517915, 0.19248287, -0.20412733],
[ 0.00682497, 0.44310024, -0.19080634, 0.33418118, 0.25900891,
-0.50168194, -0.58098831, 0.01596425],
[ 0.17729272, 1.0473268 , 2.06460011, 0.8656533 ,-0.75786665,
-0.76918499, 1.17370387, -0.75463024],
[-0.58190942, 0.02386498, -0.47363576, -0.3190833 , 0.24951237,
1.16759181, 0.53037156, 0.5635678 ],
[ 0.68403486, -0.66015504, 1.264285 , -1.24060441, -1.59612229,
-0.18508092, 0.58758641, -0.08956482]])
In [4]: for i inrange(7):
...: data[i] = i
...:
In [5]: data
Out[5]:
array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3., 3., 3., 3.],
[ 4., 4., 4., 4., 4., 4., 4., 4.],
[ 5., 5., 5., 5., 5., 5., 5., 5.],
[ 6., 6., 6., 6., 6., 6., 6., 6.]])
In [7]:data[[1,5,3]]
Out[7]:
array([[ 1., 1., 1., 1., 1., 1., 1., 1.],
[5., 5., 5., 5., 5., 5., 5., 5.],
[ 3., 3., 3., 3., 3., 3., 3., 3.]])
In [8]:data[[1,5,3],[2,3,4]]
Out[8]: array([1., 5., 3.])
In [9]: arr1 =data[[1,2]]
In [10]: arr1
Out[10]:
array([[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2., 2., 2., 2.]])
In [11]: arr1[0] =123
In [12]: arr1
Out[12]:
array([[123., 123., 123., 123., 123., 123., 123., 123.],
[ 2., 2., 2., 2., 2., 2., 2., 2.]])
In [13]: data
Out[13]:
array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3., 3., 3., 3.],
[ 4., 4., 4., 4., 4., 4., 4., 4.],
[ 5., 5., 5., 5., 5., 5., 5., 5.],
[ 6., 6., 6., 6., 6., 6., 6., 6.]])
记录中有错误操作别删除,没有保留显示。从上面的运行记录中可以得出结论如下:
1,花式索引的索引值是一个数组,对于二维被索引数据来说,索引值可以是一维或者二维。
2,花式索引生成一个新的数组,不像切片,花式索引生成的是新的数据对象。
3,花式索引的索引值为一维数组的时候,索引出数组相应的行,然后拼接成一个新的二维数组。
4,花式索引的索引值为两个维度相同的一维数组凑成的二维向量时,以两个维度作为纵横坐标索引出单值后组合成新的一维向量。
5,由于花式索引不同于切片,实现的是拷贝功能,生成的新数组改变不会影响元数据。