python - 有没有办法将 mxn 矩阵(1)与 pxn 矩阵(2)批量相乘,其中矩阵(2)的每一行都是标量?
问题描述
我有一个权重矩阵(权重)如下
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
我正在尝试对这个操作进行矢量化,而不必循环数千次。我已经有一个随机权重表(数据框),每一行代表上面代码中的权重数组。上面的代码有效,但需要相当长的时间来处理。有没有办法使用矩阵数学来解决这个问题?我看过 np.einsum 但我不明白。
任何帮助将不胜感激。
解决方案
我不确定我的问题是否正确,但如果您想将第一个矩阵乘以然后对每一列求和[A] (5 x 7)
:[B] (5 X m)
首先定义你的矩阵:
weights = np.matrix(np.random.rand(5,7))
daily = np.matrix([ ])
然后确定每个矩阵的形状以将它们相乘(左矩阵的列数必须等于右矩阵的行数)。在这种情况下,我们需要转置 rigth 矩阵(每天):
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)
就是这样,希望我能回答你的问题。
推荐阅读
- linux-kernel - USB-OTG 可以用于 U-Boot 和 Linux 控制台吗?
- android - ViewModel 片段在屏幕旋转时重新创建
- c++ - stringstream 是否忽略空格?
- c++ - 为什么在 C++ 标准容器中给模板参数取别名?
- chart.js - 如何在图表中设置长度差异?
- r - 如何解析R中的Windows目录地址?
- ios - Mac 打开时无法在 wifi 上启动 iOS Progressive Web App
- r - 将 iframe Amazon Associate Link 嵌入到 .md 文件 R
- javascript - 如何根据另一个属性的值访问嵌套的 JSON 属性?
- c++ - how to use default constructor while using composition