python - 填充numpy数组的指定维度
问题描述
我有一个相对常见的情况,我需要填充数组的给定维度。例如,如果我有一个数组:
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]]])
有没有人有更整洁/更优雅的方式来做到这一点?我在布尔数组上执行此操作,因此填充操作是否涉及在其他轴上求和,或者只是从给定元素(在本例中为维度 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]]])
推荐阅读
- php - 通过限定名称与 ::class 引用 Laravel 模型
- php - Symfony - prod 环境中异常页面的问题
- c# - ASP.NET Identity CreateAsync 返回错误“名称不能为空或为空”。
- elasticsearch - 将日志文件/数据从一个 EC2 实例发送到另一个
- reactjs - 尝试在 localhost:3000 上运行应用程序时出错
- sql - 将 endDate 提供为先前的值
- r - 从多个文件中提取数据时如何编写 tryCatch() 函数?
- php - 如何在 laravel Blade.php 文件中使用外部 PHP 文件?
- javascript - 在 node.js 中一次握手后 Web-socket 连接断开并做出反应
- php - WooCoomerce WC_Abstract_Order::get_coupon_codes PHP 致命错误