Python-有没有一种使用Numpy进行矩阵乘法的快速方法
嘿,我有个问题。我目前已经用Numba编写了部分代码。对于我的二进制矩阵中的每个单独元素,其3x3邻域[i-1:i+2,j-2:j+2]应该取。我将这个邻域乘以一个矩阵[[64,128,1],[32,0,2],[16,8,4]],形成和。 我知道Numba在某些地方和Numpy相处得不太好。对于NxM矩阵中的所有元素,是否有一个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):
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,那么这个会更快吗?您可能希望向某人发送地址,以便通知他们。另外,请。@arandomcoderdot
dot不工作,因为它是矩阵乘法。我需要一个乘以a*B的函数,比如=a1*b1a2*b2。NumPy的相同方法是np.multiply
。但我有同样的结果。好吧。我认为在这一点上没有其他方法可以更快地完成它。@superbitch抱歉是我第一次使用Stackoverflow。但是谢谢你提供的这些信息。Numpy convalce方法和SciPy方法一样吗?我得到了相同的结果,但速度比我在顶部使用numba方法慢了一倍。我不能把SciPy和Numba结合起来这就是问题所在。Numba帮助我在图像上进行迭代