堆叠列向量和数组

时间:2018-02-24 01:31:44

标签: python numpy tensorflow

假设我有一个列向量

B = [[5], 
     [7]]

和一个数组

A = [[1, 1, 1, 1], 
     [247, 121, 1, 314]]

我想要的是将A的第一行与B的对应部分(以及类似的底部部分)相结合,然后在这些对上评估函数func(a,b)。因此,例如,如果函数是scipy.special.betaln,我想计算以下

C = [[betaln(1,5)  , betaln(1,5)  , betaln(1,5), betaln(1,5)  ]
     [betaln(247,7), betaln(121,7), betaln(1,7), betaln(314,7)]]

产生:

C = [[-1.609 , -1.609  , -1.609, -1.609 ]
     [-32.070, -27.1618, -1.945, -33.732]]

实际上,我将拥有一个阵列A,其中包含大约27,000列和行,从几个到几百个。因此,B也将是长度为1或2到几百的向量。我坚持这个,我不知道什么是最好的(快速)方式。我在张量流上做这个,因此A和B是张量,但是numpy数组也可以正常工作。 (或者也许是发电机?我不知道......)

谢谢!

1 个答案:

答案 0 :(得分:4)

scipy.special.betalnufunc,这意味着它可以接受数组(或者在这种情况下,甚至是列表列表)作为输入。 AB中的值将自动为broadcasted

In [205]: special.betaln([[1, 1, 1, 1], [247, 121, 1, 314]], [[5], [7]])
Out[205]: 
array([[ -1.60943791,  -1.60943791,  -1.60943791,  -1.60943791],
       [-32.0707512 , -27.16180903,  -1.94591015, -33.73292188]])

在整个数组上调用betaln一次比调用betaln多次快得多 - 每对标量值一次。