将同一numpy数组与标量相乘多次

2024-05-03 12:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

编辑: 一个示例图像演示了我在寻找什么。这里nchannel=3。 enter image description here 输入图像是arr。最后一个图像是经过变换的arr


Tags: in图像numpyfornpchanneltransformrange
2条回答

编辑:

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]]]

您需要的是沿最后一个轴的简单矩阵乘法:

import numpy as np

arr = np.random.rand(9,9,200)
transform = np.random.uniform(size=(200, 200)) / 200

arr = arr @ transform

相关问题 更多 >