我遇到了一个相对常见的情况,我需要填充数组的给定维度。例如,如果我有一个数组:
example_array = np.zeros((2,3,4), dtype=bool)
example_array[:, 1, [1,3]] = True
其中包含内容:
array([[[False, False, False, False],
[False, True, False, True],
[False, False, False, False]],
[[False, False, False, False],
[False, True, False, True],
[False, False, False, False]]])
我想填充给定维度的内容 - 例如,如果我想填充维度 1,我可以这样做:
output = np.cumsum(example_array, axis=1, dtype=bool)
output = np.cumsum(output[:, ::-1, :], axis=1, dtype=bool)
给我想要的输出:
array([[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]],
[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]]])
有人有更简洁/更优雅的方法吗?我在 bool 数组上执行此操作,因此无论填充操作是否涉及对其他轴求和,或者只是复制给定元素(在本例中为维度 1 的元素 1)中的值,我都不介意。
预先感谢您的任何想法/帮助。
最佳答案
节省内存的解决方案是使用 np.broadcast_to
获得查看的输出 -
In [14]: a # input array
Out[14]:
array([[[False, False, False, False],
[False, True, False, True],
[False, False, False, False]],
[[False, False, False, False],
[False, True, False, True],
[False, False, False, False]]])
In [15]: np.broadcast_to(a.any(1,keepdims=True), a.shape)
Out[15]:
array([[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]],
[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]]])
如果您需要输出拥有自己的内存空间,请在此处附加 .copy()
。
或者,我们可以使用np.repeat
-
In [63]: np.repeat(a.any(1,keepdims=True) ,a.shape[1],axis=1)
Out[63]:
array([[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]],
[[False, True, False, True],
[False, True, False, True],
[False, True, False, True]]])
关于python - 填充 numpy 数组的指定维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57533218/