假设我有一个数组
a = array([[[ 29, 29, 27],
[ 36, 38, 40],
[ 86, 88, 89]],
[[200, 200, 198],
[199, 199, 197]
[194, 194, 194]]])
我希望在列表列表中从左到右翻转第3个元素,这样就会变得像
b = array([[[ 29, 29, 89], # 27 became 89
[ 36, 38, 40],
[ 86, 88, 27]], # 89 became 27
[[200, 200, 194], # 198 became 194
[199, 199, 197],
[194, 194, 198]]]) # 194 became 198
我查了NumPy手册,但仍无法找到解决方案,.flip和.fliplr在这种情况下看起来很合适,但是如何使用它们?
答案 0 :(得分:2)
使用以下命令对数组进行索引以选择子数组:
> a[:,:,-1]
array([[198, 197, 194],
[ 27, 40, 89]])
这将选择a
第三维的最后一个元素。子阵列的形状为(2,3)
。然后使用以下方法反转选择:
a[:,:,-1][:,::-1]
第二个切片[:,::-1]
沿着第一个维度([:]
)获取所有内容,沿第二个维度获取所有元素,但是反转([::-1]
)。切片语法基本上是从第一个元素开始,转到最后一个元素([:]
),但是以相反的顺序([::-1]
)执行。您可以伪代码将其写为[start here : end here : use this step size]
。 -1
告诉它向后走。
并将其分配给原始数组的第一个切片。这会更新/覆盖a
a[:,:,-1] = a[:,:,-1][:,::-1]
> a
array([[[ 29, 29, 89],
[ 36, 38, 40],
[ 86, 88, 27]],
[[200, 200, 194],
[199, 199, 197],
[194, 194, 198]]])