填充 numpy 数组的指定维度
Filling across a specified dimension of a numpy array
我有一个相对常见的情况,我需要填充数组的给定维度。例如,如果我有一个数组:
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]]])
有没有人有 neater/more 优雅的方法来做到这一点?我在布尔数组上这样做,所以无论填充操作是否涉及跨其他轴求和,或者只是复制给定元素(在本例中为维度 1 的元素 1)的值,我都不介意。
提前感谢任何thoughts/assistance。
一种节省内存的解决方案是使用 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]]])
如果您需要输出有自己的内存 space,请在此处附加 .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]]])
我有一个相对常见的情况,我需要填充数组的给定维度。例如,如果我有一个数组:
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]]])
有没有人有 neater/more 优雅的方法来做到这一点?我在布尔数组上这样做,所以无论填充操作是否涉及跨其他轴求和,或者只是复制给定元素(在本例中为维度 1 的元素 1)的值,我都不介意。
提前感谢任何thoughts/assistance。
一种节省内存的解决方案是使用 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]]])
如果您需要输出有自己的内存 space,请在此处附加 .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]]])