【发布时间】:2020-10-13 16:29:05
【问题描述】:
假设我有两个数组x 和t,长度为N,我想创建一个矩阵,其中
M_i,j = t_i * t_j * func(x_i, x_j)
在这种情况下,func() 只接受x 的两个元素并返回一个标量值。
t.shape = (N, )
x.shape = (N, 2)
// expected
M.shape = (N, N)
问题是:这是否可以在不使用 numpy 以矢量化方式循环整个矩阵的情况下完成?我知道有一些方法可以通过函数填充矩阵,问题是,这里的函数参数取决于让我卡住的矩阵的索引。
【问题讨论】:
-
这取决于
func。如果func可以广播它的参数,它应该只是M = t[:, np.newaxis] * t * func(x[:, np.newaxis], x)(或者使用M = np.einsum('i,j,ij->ij', t, t, func(x[:, np.newaxis], x))可能会更有效)。 -
@jdehesa 是的,我已经为我的特定功能找到了解决方案,如我的回答中所述。但我想一般情况下是做不到的..
标签: python arrays numpy vectorization