【问题标题】:Reduce 3rd dimension of numpy array and sum the values减少 numpy 数组的第三维并对值求和
【发布时间】:2021-05-06 19:09:23
【问题描述】:

我认为这很简单,但我不太明白。我有一个大的 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 数组,其中数据全部为 2。我希望这能说明我正在努力实现的目标。如果因子变为 4,我们将得到一个 10x10x4 的数组。

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

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

谢谢。

【问题讨论】:

    标签: python arrays numpy reshape transpose


    【解决方案1】:

    我认为您可以对整个数据进行整形并求和:

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

    【讨论】:

    • 你“认为”?你非常确定也许:)
    • 这行得通,非常感谢!你能解释一下它为什么起作用吗?当所有事情都在一行中完成时,我会遇到麻烦。
    • @BloodSexMagik 这本质上只是您的代码。由于您只在 processed_data[i][j]=arr[i][j].reshape 上执行了双 for 循环,因此您可以使用 *arr.shape[:2] 解压缩前两个维度以重塑并保存 for 循环。
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2016-10-02
    • 2015-06-18
    • 2015-06-19
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多