python - 填充 numpy 数组的指定维度

标签 python numpy numpy-ndarray

我遇到了一个相对常见的情况,我需要填充数组的给定维度。例如,如果我有一个数组:

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/

相关文章:

python - matplotlib 中轴的刻度格式

python - 分类变量到多列

python - scipy 中正常值的数值积分

python - Numpy.sum() 将 (2,2,2...n) 的 nD 数组转换为形状 (2,) 的 1D 数组

python - 没有 HTML 转义的 Django 表单值

python - 将参数传递给 super().__init__ 同时将参数保留在签名中的优雅方法?

python - GAE Python 2.7,没有 _io 模块?

python - 如何将 Dask Dataframe 转换为 Dask Array?

python - 具有完全向量化的 Numpy 有序元素减法

python - 将矩阵与列向量进行比较