有没有办法将 mxn 矩阵 (1) 与 pxn 矩阵 (2) 批量相乘,其中矩阵 (2) 的每一行都是标量?

Is there a way to batch multiply a mxn matrix(1) with a pxn matrix(2) where each row of matrix(2) is a scalar?

我有一个权重矩阵(权重)如下

A           B           C           D           E
0.416616274 0.007893688 0.074517004 0.164169555 0.336803478
0.165291635 0.205668613 0.085747923 0.278888074 0.264403755
0.308129534 0.284158392 0.292223348 0.001855199 0.113633527
0.090124092 0.404455217 0.120245226 3.84E-01    0.001496657
0.093981405 0.295247335 0.174392231 0.337238495 0.099140533
0.080119669 0.43934981  0.215148622 0.010537966 0.254843933
0.315502416 0.082623702 0.076406749 0.196668283 0.32879885

我有另一个矩阵(每日)如下:

基本上我写的代码如下:

def f(x):
    if x < 0:
        return abs(x)
    else:
        return x

for i in range(10000):
    weights = np.random.random(num_assets)
    weights /= np.sum(weights)
    #multiply matrix daily by weights, sum all columns and get the min value
    dd = np.multiply(weights, daily).sum(axis=1, skipna = True).min()
    dd = f(dd)
    dd1.append(dd) #append results to empty list

我正在尝试矢量化此操作,而不必循环函数数千次。我已经有了一个 table(dataframe) 的随机权重,每一行代表上面代码中的权重数组。上面的代码有效,但需要相当长的时间来处理。有没有办法使用矩阵数学来解决这个问题?我看过 np.einsum 但我不明白。

如有任何帮助,我们将不胜感激。

我不确定我是否答对了问题,但如果您想将第一个矩阵 [A] (5 x 7)[B] (5 X m) 相乘,然后对每一列求和:

首先定义矩阵:

weights = np.matrix(np.random.rand(5,7))
daily = np.matrix([ ])

然后确定每个矩阵的形状以将它们相乘(左矩阵的列数必须等于右矩阵的行数)。在这种情况下,我们需要转置右矩阵(每天):

daily = np.transpose(daily)

使用np.dot()将两个矩阵相乘:

matrix_result = np.dot(weights, daily) 

最后对每一列求和,将 matrix_result 与一个垂直向量相乘

v_ones = np.ones(( ))
sums_results = np.dot(matrix_result, v_ones) 

就是这样,希望我能回答你的问题。