python - 将相同的 numpy 数组与标量相乘多次

标签 python numpy numpy-ndarray tensor array-broadcasting

我有一个大小为 (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

编辑: 展示我正在寻找的内容的示例图像。这里nchannel = 3。 enter image description here 输入图像是arr。最终图像是转换后的arr

最佳答案

编辑:

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/

相关文章:

python - numpy 的 np.transpose(matrix) 和 np.matrix.transpose() 在二维矩阵上的区别?

python - 在成对比较 NxN numpy 数组中找到 N 个最小值?

python - 人工神经网络: Bug with GridSearchCV returns the first parameters each time

python - 可以在 python 中向量化这个数组操作吗?

python - 从 NumPy 矩阵中满足条件的每一行中取 N 个第一个值

python numpy - 提高列余弦相似度的效率

python - Numpy.sum() 将 (2,2,2...n) 的 nD 数组转换为形状 (2,) 的 1D 数组

python - 如何在尚未迭代的生成器中捕获 GeneratorExit?

python - 如果用户输入他们想再次玩,我如何才能在 python 中选择你自己的冒险故事来重新开始?

Python 语义 - for 循环声明中的多个参数