如何使用不匹配的维度进行矢量化

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 <= pr 变成 nxmxp 矩阵。然后我在 rB 上调用 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