答案 0 :(得分:1)
如果你只想采取"清洁"切片,而不是从某些"行"中取出一些元素,然后你可以使用数字索引而不是掩码。
E.g:
arr = np.array([[[1,2,3,4], [5,6,7,8]], [[9,8,9,8], [7,6,7,6]]])
sub_idx = np.array([0,2])
sub_arr = arr[:, :, sub_idx]
这是arr
子集的副本,即第0和第2"切片"在最后一个维度:
array([[[1, 3],
[5, 7]],
[[9, 9],
[7, 7]]])
请注意,定义要使用哪些索引的数组只是一维的,严重降低了其内存要求。 (当然,在你的情况下,副本仍占据了很大一部分内存。)
另请注意,这会为您提供副本,因此您对结果(sub_arr
)所做的任何更改都不会在原始数组中显示。要做到这一点,您必须将数组复制回来:
sub_arr[:] = 0 # Manipulate the values
arr[sub_idx] = sub_arr