微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

减少 numpy 数组的第 3 维并对值求和

如何解决减少 numpy 数组的第 3 维并对值求和

我认为这很简单,但我不太明白。我有一个很大的 3d 数组,我想将第三个暗淡减少某个因素,然后将这些值相加以获得减小的大小。一个可以得到我想要的东西的例子是:

import numpy as np

arr=np.ones((10,10,16))
processed_data=np.zeros((arr.shape[0],arr.shape[1]),dtype='object')
factor=2

for i in range(arr.shape[0]):
    for j in range(arr.shape[1]):
        processed_data[i][j]=arr[i][j].reshape(int(arr.shape[2]/factor),-1).sum(axis=1)

所以我们取最后一个维度,将其重塑为一个额外的维度,然后沿该维度求和。在上面的例子中,数据是一个全为 1 的 10x10x16 数组,所以当因子 = 2 时,我们得到一个 10x10x8 数组,数据都是 2s。我希望这说明了我正在努力实现的目标。如果因子变为 4,我们将得到一个 10x10x4 的数组。

方法并不理想,因为它涉及创建一个单独的 processing_data 'object' 数组,我宁愿将其保留为 3D 数组,只是具有减少的第三维。它还涉及迭代二维数组中的每个元素,我认为这不是必需的。而且真的很慢。

感谢任何帮助 - 我怀疑这是重塑和移调的组合,但我无法理解它。

谢谢。

解决方法

我认为你可以重塑整个数据并求和:

arr.reshape(*arr.shape[:2],-1,2).sum(axis=-1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。