假设我有一个列向量
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数组也可以正常工作。 (或者也许是发电机?我不知道......)
谢谢!
答案 0 :(得分:4)
scipy.special.betaln
是ufunc,这意味着它可以接受数组(或者在这种情况下,甚至是列表列表)作为输入。 A
和B
中的值将自动为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
多次快得多 - 每对标量值一次。