我想以仅打印第二个数组中每行最后一个元素的方式对3D数组进行切片。
在我的3D阵列中:
np.random.seed(42)
M = np.random.randint(10, size=(2,2,10))
print(M)
我尝试以这种方式访问第二个数组的最后一个元素:
print(M[1::2]) ## which just prints me the whole 2nd Array
print(M[1::,2]) ## which gives me an error of index 2 being out of bounds
我了解第一个print()方法,例如:1:#选择了第二个数组:#选择了第二个数组的所有行:2#选择该行的第二个索引并进行打印
奇怪的是,它打印了整个数组,这使我感到困惑。我希望第二个print()方法至少单独打印第二个索引,但我收到了该错误消息。
所以我尝试了更多,并提出了该代码:
print(M[1:,0:,::2])
它给了我想要的结果,但是我看不懂代码。我明白1:##选择第二个数组但是,0:,:: 2使我感到困惑。 :: 2正在选择每个第二个索引,但是我仍然不清楚何时可以使用':'。或“,”在切片过程中的含义是什么。
在numpy中,运算符的工作方式如下:-[start_index:end_index:step]
。
这意味着当您索引M [1:,0:,:: 2]时,您实际上在索引的是第一维的第一个索引([1:]
)的所有内容,然后是第二维的开始的所有内容([0:]
),最后每个元素的步长为2([::2]
)。
[,
用于分隔尺寸,所以我假设您实际要做的是M[:,1,-1]
以获取每个第二个数组的最后一个元素。