减少 numpy 数组的第三维并对值求和
Reduce 3rd dimension of numpy array and sum the values
我觉得这很简单,但我不太明白。我有一个大的 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 的数组。
这种方法并不理想,因为它涉及创建一个单独的 processed_data 'object' 数组,我宁愿将其保留为 3D 数组,只是减少了第三维。它还涉及迭代二维数组中的每个元素,我认为这是不必要的。而且真的很慢。
感谢任何帮助 - 我怀疑它是重塑和移调的结合,但我无法理解它。
谢谢。
我认为你可以对整个数据进行整形并求和:
arr.reshape(*arr.shape[:2], -1, 2).sum(axis=-1)
我觉得这很简单,但我不太明白。我有一个大的 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 的数组。
这种方法并不理想,因为它涉及创建一个单独的 processed_data 'object' 数组,我宁愿将其保留为 3D 数组,只是减少了第三维。它还涉及迭代二维数组中的每个元素,我认为这是不必要的。而且真的很慢。
感谢任何帮助 - 我怀疑它是重塑和移调的结合,但我无法理解它。
谢谢。
我认为你可以对整个数据进行整形并求和:
arr.reshape(*arr.shape[:2], -1, 2).sum(axis=-1)