有没有办法将 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)
就是这样,希望我能回答你的问题。
我有一个权重矩阵(权重)如下
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)
就是这样,希望我能回答你的问题。