【发布时间】:2018-02-19 01:54:12
【问题描述】:
将 np 数组的每一行(axis=2)与矩阵相乘的最 Pythonic 方法是什么。例如,我正在处理读取为形状为 (480, 512, 3) 的 np 数组的图像,我想将每个 img[i,j] 与 3x3 矩阵相乘。我不想为此使用 for 循环。这是我尝试过的,但它给出了一个错误
A = np.array([
[.412453, .35758, .180423],
[.212671, .71516, .072169],
[.019334, .119193, .950227]
])
lin_XYZ = lambda x: np.dot(A, x[::-1])
#lin_XYZ = np.vectorize(lin_XYZ)
tmp_img = lin_XYZ(tmp_img[:,:])
File ".\proj1a.py", line 24, in color2luv
tmp_img = lin_XYZ(tmp_img[:,:])
File ".\proj1a.py", line 22, in <lambda>
lin_XYZ = lambda x: np.dot(A, x)
ValueError:形状 (3,3) 和 (480,512,3) 未对齐:3 (dim 1) != 512 (dim 1)
【问题讨论】:
-
“行”实际上是指轴 = 2 还是轴 = 1? (因为第一个轴,列轴,将是axis = 0?)
-
看起来你想要的只是
x.dot(A)而不是A.dot(x)。 -
你可以重塑你的矩阵,比如说,从 MxNx3 到 Ox3,O = M*N,然后将它相乘,然后再次重塑它。
-
@AGNGazer,请参考:stackoverflow.com/help/be-nice
-
@AGNGazer 抱歉,我下次会尝试改进,但我不想将 (480,512) 乘以 3x3,我的意思是每个
img[i,j]都会给出一行包含 3 个元素的行,然后将它与3x3矩阵相乘,下次@heltonbiker 我会尝试更好地描述问题