【发布时间】:2021-12-06 11:18:10
【问题描述】:
我有一个大小为 (9,9,200) 的 3D NumPy 数组和一个大小为 (200,200) 的 2D 数组。
我想获取形状为(9,9,1) 的每个通道并生成一个数组(9,9,200),每个通道在一行中乘以1 个标量200 倍,然后对其进行平均,使得结果数组为(9,9,1)。
基本上,如果输入数组中有n 通道,我希望每个通道乘以n 次并取平均值——这应该发生在所有通道上。有没有有效的方法?
到目前为止,我所拥有的是这个 -
import numpy as np
arr = np.random.rand(9,9,200)
nchannel = arr.shape[-1]
transform = np.array([np.random.uniform(low=0.0, high=1.0, size=(nchannel,)) for i in range(nchannel)])
for channel in range(nchannel):
# The below line needs optimization
temp = [arr[:,:,i] * transform[channel][i] for i in range(nchannel)]
arr[:,:,channel] = np.sum(temp, axis=0)/nchannel
【问题讨论】:
-
你能发布一个最小的可执行示例吗?我不确定 arr 和 nchannel 是什么...
-
我不确定我是否得到你想要的,二维数组有什么用? n 个标量从何而来?
-
也许可以添加到 sehan2 的评论中,如果它不是
9 x 9 x 200,而是像2 x 2 x 3这样具有预期输出的玩具示例,那将非常有帮助:-) 我很遗憾这样做从问题中不明白你的问题.. -
感谢您指出@sehan2。 @user16648691 二维数组是一个
nxn矩阵,每一行对应一个通道将乘以的 n 个标量。 -
如果我理解这一点,那就是张量乘以矩阵,然后在轴 -1 上取平均值?
标签: python numpy numpy-ndarray tensor array-broadcasting