Python-有没有一种使用Numpy进行矩阵乘法的快速方法

Python-有没有一种使用Numpy进行矩阵乘法的快速方法,python,numpy,numba,Python,Numpy,Numba,嘿,我有个问题。我目前已经用Numba编写了部分代码。对于我的二进制矩阵中的每个单独元素,其3x3邻域[i-1:i+2,j-2:j+2]应该取。我将这个邻域乘以一个矩阵[[64,128,1],[32,0,2],[16,8,4]],形成和。 我知道Numba在某些地方和Numpy相处得不太好。对于NxM矩阵中的所有元素,是否有一个Numpy函数来精确执行此函数? 就我而言,结果可以保存为另一个矩阵中的中间结果,然后使用索引调用 for i in prange(1, h - 1):

嘿,我有个问题。我目前已经用Numba编写了部分代码。对于我的二进制矩阵中的每个单独元素,其3x3邻域[i-1:i+2,j-2:j+2]应该取。我将这个邻域乘以一个矩阵[[64,128,1],[32,0,2],[16,8,4]],形成和。 我知道Numba在某些地方和Numpy相处得不太好。对于NxM矩阵中的所有元素,是否有一个Numpy函数来精确执行此函数? 就我而言,结果可以保存为另一个矩阵中的中间结果,然后使用索引调用

    for i in prange(1, h - 1):
        for j in range(1, w - 1):
            neighbor = lastResult[i - 1 : i + 2, j - 1 : j + 2]
            x = sum(nb * pattern)

提前谢谢。

看起来您正在计算卷积。看起来numpy有一个用于一维(数组)卷积()的函数。Scipy支持二维(矩阵)卷积()

从文档中可以看出,您将使用如下所示的convolve2d函数,其中A是您的MxN矩阵,h是您希望将A中的每个窗口乘以的3x3矩阵

result=scipy.signal.convolve2d(A, h, mode='same', boundary='fill', fillvalue=0)

结果将包含原始矩阵A的元素i,j周围3x3邻域的总和,在每个元素乘以h中的相应值之后。

或许可以这样缩放和相加

import numpy as np

a = np.random.randint(2, size=(10, 10))
print(a)

s = slice(None, -2)
t = slice(1, -1)
u = slice(2, None)
print(
     64 * a[s, s] + 128 * a[s, t] + 1 * a[s, u] +
     32 * a[t, s] +                 2 * a[t, u] +
     16 * a[u, s] +   8 * a[u, t] + 4 * a[u, u]
)
演示输出:

[[0 0 1 0 1 0 0 1 1 0]
 [0 0 0 1 1 0 0 1 0 1]
 [1 1 1 0 0 0 0 1 1 0]
 [0 1 1 0 1 0 0 0 0 1]
 [0 1 1 1 0 0 0 1 0 1]
 [1 1 1 1 1 1 1 1 0 0]
 [0 0 1 0 1 1 0 0 1 0]
 [1 0 0 1 0 0 0 0 1 1]
 [1 1 1 1 0 0 0 0 0 1]
 [0 1 1 1 1 1 1 0 1 1]]
[[ 29 154  83 160  96   7 141 250]
 [ 46  57 181 200  80   3 130 101]
 [207 252 122  16  32   5 137 214]
 [159 254 125 188  92  30  24  51]
 [167 235 246 110  58  51 164 105]
 [211 197 235 211 225 225 198  76]
 [ 61 158  89 177 192  64   3 134]
 [110  63 188 124  28  24  21 143]]

我很确定有一种方法叫做
dot
用于numpy数组。将其标记到数组的末尾,并传入要乘法的数组。这就是你所说的乘法吗?我以前也尝试过
dot
方法,但是我得到了一些错误。我不知道该怎么解决这个问题。如果是
x=np.sum(nb*pattern)
?@Bayezid,那么这个会更快吗?您可能希望向某人发送地址,以便通知他们。另外,请。@arandomcoder
dot
dot不工作,因为它是矩阵乘法。我需要一个乘以a*B的函数,比如=a1*b1a2*b2。NumPy的相同方法是
np.multiply
。但我有同样的结果。好吧。我认为在这一点上没有其他方法可以更快地完成它。@superbitch抱歉是我第一次使用Stackoverflow。但是谢谢你提供的这些信息。Numpy convalce方法和SciPy方法一样吗?我得到了相同的结果,但速度比我在顶部使用numba方法慢了一倍。我不能把SciPy和Numba结合起来这就是问题所在。Numba帮助我在图像上进行迭代