python 数据索引请教

python 数据索引请教

In [122]: arr = np.arange(32).reshape((8, 4))
In [123]: arr
Out[123]:
array([[ 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]])
In [124]: arr[[1, 5, 7, 2], [0, 3, 1, 2]]
Out[124]: array([ 4, 23, 29, 10])

In [125]: arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
Out[125]:
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])

arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
这个可以解释下是什么吗,谢谢。


回答:

>>>type(arr)

<class 'numpy.ndarray'>

arr不是普通数组,支持对下标更灵活的使用。

arr[:]的意思是取全部元素。所以
arrarr[:]arr[:][:]是等价的。
理解这一点,就可以把 arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]表达式拆分来看。

首先 arr[[1, 5, 7, 2]] 是取原数组的第1,5,7,2这四行
即:

[ 4, 5, 6, 7], #1

[ 8, 9, 10, 11], # 2

[20, 21, 22, 23], #5

[28, 29, 30, 31] #7

按 1,5,7,2 顺序重排即为

[

[ 4, 5, 6, 7], #1

[20, 21, 22, 23], #5

[28, 29, 30, 31] #7

[ 8, 9, 10, 11], # 2

]

对上面的这个结果,姑且称作arrB, 再看表达式后半部分[:, [0, 3, 1, 2]], 这里逗号分为两个维度,取第一维的全部,即冒号:的作用,再取第二维的 0,3,1,2下标的元素。结果如你所见。

以上是 python 数据索引请教 的全部内容, 来源链接: utcz.com/a/159376.html

回到顶部