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[:]的意思是取全部元素。所以arr
与arr[:]
和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