【发布时间】:2019-02-20 00:31:56
【问题描述】:
我有一个二维数组和一个一维数组,如下所示。我想做的是用二维和一维数组的乘积填充二维数组中的空白空间 - 可能最简单的演示如下:
all_holdings = np.array([[1, 0, 0, 2, 0],
[2, 0, 0, 1, 0]]).astype('float64')
sub_holdings = np.array([0.2, 0.3, 0.5])
我希望得到的结果是:
array([[1. , 0.2, 0.3, 2. , 1. ],
[2. , 0.4, 0.6, 1. , 0.5]])
即(此处显示的工作原理):
array([[1., 1*0.2, 1*0.3, 2, 2*0.5],
[2., 2*0.2, 2*0.3, 1, 1*0.5]])
有没有人能想到一种相对快速、最好是矢量化的方法来做到这一点?我必须在多个二维数组上重复运行此计算,但始终在二维数组的同一位置使用空格。
提前(以及之后)感谢
【问题讨论】:
-
矢量化通常具有固定成本,因此仅对大型阵列有益。是这种情况还是您的典型用例与您的示例相似?
-
首先,我弄清楚如何做到这一点是一级迭代 -
sub_holdings的元素和all_holdings的相应零。将计算应用于所有行不需要循环。一旦流程定义明确且干净,您就可以担心“矢量化”了。做更多的努力可能不值得。 -
@Julien Hi - 平均而言,我将处理大约 200 个这些二维数组。
-
数组的数量通常是无关紧要的。它们的大小(长度)是。其中 200 个似乎可以用原生循环处理。
-
@Julien - 谢谢 - hpaulj 在下面的回答是迭代的,而且看起来非常有效。
标签: python numpy array-broadcasting