我有一个大小为 (9,9,200)
的 3D NumPy 数组和一个大小为 (200,200)
的 2D 数组。
我想获取形状 (9,9,1)
的每个 channel 并生成一个数组 (9,9,200)
,每个 channel 在单个 channel 中乘以 1 标量 200 倍行,并对其进行平均,使得结果数组为 (9,9,1)
。
基本上,如果输入数组中有 n 个 channel ,我希望每个 channel 乘以 n 次并求平均值 - 这应该发生在所有 channel 上。有没有有效的方法来做到这一点?
到目前为止我所拥有的是这个 -
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
最佳答案
编辑:
import numpy as np
n_channels = 3
scalar_size = 2
t = np.ones((n_channels,scalar_size,scalar_size)) # scalar array
m = np.random.random((n_channels,n_channels)) # letters array
print(m)
print(t)
m_av = np.mean(m, axis=1)
print(m_av)
for i in range(n_channels):
t[i] = t[i]*m_av1[i]
print(t)
输出:
[[0.04601533 0.05851365 0.03893352]
[0.7954655 0.08505869 0.83033369]
[0.59557455 0.09632997 0.63723506]]
[[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]]]
[0.04782083 0.57028596 0.44304653]
[[[0.04782083 0.04782083]
[0.04782083 0.04782083]]
[[0.57028596 0.57028596]
[0.57028596 0.57028596]]
[[0.44304653 0.44304653]
[0.44304653 0.44304653]]]
关于python - 将相同的 numpy 数组与标量相乘多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69632369/