如何使用不匹配的维度进行矢量化
How to vectorize with mismatched dimensionality
我有一些
形式的限制
A_{i,j,k} = r_{i,j}B_{i,j,k}
A
是一个 nxmxp
矩阵,B 也是。 r
是一个 nxm
矩阵。
我想以某种方式在 Python 中尽可能高效地将其矢量化。现在,我通过说 r_{i,j,k} = r_{i,j} for all 1 <= k <= p
将 r
变成 nxmxp
矩阵。然后我在 r
和 B
上调用 np.multiply
。这似乎效率低下。欢迎任何想法,谢谢。
def ndHadamardProduct(r, n, m, p): #r is a n x m matrix, p is an int
rnew = np.zeros(n, m, p)
B = np.zeros(n, m, p)
for i in range(n):
for j in range(m):
for k in range(p):
r[i, j, k] = r[i, j]
B[i, j, k] = random.uniform(0, 1)
return np.multiply(r, B)
使用 np.newaxis
添加一个额外的维度,然后 broadcasting 会为您处理重复。
import numpy as np
r = np.random.random((3,4))
b = np.random.random((3,4,5))
a = r[:,:,np.newaxis] * b
我有一些
形式的限制A_{i,j,k} = r_{i,j}B_{i,j,k}
A
是一个 nxmxp
矩阵,B 也是。 r
是一个 nxm
矩阵。
我想以某种方式在 Python 中尽可能高效地将其矢量化。现在,我通过说 r_{i,j,k} = r_{i,j} for all 1 <= k <= p
将 r
变成 nxmxp
矩阵。然后我在 r
和 B
上调用 np.multiply
。这似乎效率低下。欢迎任何想法,谢谢。
def ndHadamardProduct(r, n, m, p): #r is a n x m matrix, p is an int
rnew = np.zeros(n, m, p)
B = np.zeros(n, m, p)
for i in range(n):
for j in range(m):
for k in range(p):
r[i, j, k] = r[i, j]
B[i, j, k] = random.uniform(0, 1)
return np.multiply(r, B)
使用 np.newaxis
添加一个额外的维度,然后 broadcasting 会为您处理重复。
import numpy as np
r = np.random.random((3,4))
b = np.random.random((3,4,5))
a = r[:,:,np.newaxis] * b