矩阵元素明智的移位列乘法

问题描述 投票:2回答:4

说我有两个数组,A和B。

元素明智的乘法定义如下:enter image description here

我想以卷积式的方式进行逐元素乘法,即,将每一列向右移动一步,例如,第1列现在是第2列,第3列现在是第1列。这应该产生一个(2×3×3)数组(所有3种可能性为2x3矩阵)

enter image description here

python numpy matrix linear-algebra matrix-multiplication
4个回答
4
投票

我们可以将A与它自己的一个切片连接起来,然后获得那些滑动窗口。要获得这些窗口,我们可以利用基于np.lib.stride_tricks.as_stridednp.lib.stride_tricks.as_strided。然后,将这些窗口乘以scikit-image's view_as_windows作为最终输出。 scikit-image's view_as_windows


2
投票

仅需注意def vaw_with_as_strided(A,B): A1 = np.concatenate((A,A[:,:-1]),axis=1) s0,s1 = A1.strides S = (A.shape[1],)+A.shape w = np.lib.stride_tricks.as_strided(A1,shape=S,strides=(s1,s0,s1)) return w*B / @Paul Panzer's array-assignment。这些功能很简洁,知道它们具有相当明显的恒定开销是很有用的。这是@Divakar基于@Paul Panzer's array-assignment的解决方案(vaw)与我基于复制重塑的方法之间的比较。


1
投票

对列数运行一个for循环,并使用19x19绕轴= 1,以移动列并进行矩阵乘法。


0
投票

我实际上可以从阵列的两侧填充2列(以获得2x5阵列)并以'b'作为内核运行conv2,我认为它更有效

© www.soinside.com 2019 - 2024. All rights reserved.