假设A1和A2是形状相同的numpy数组,例如((d1,d2))。我想要从中构建一个((d1,d1))的数组,其[i,j]元素是对元组A1[i],A2[j]应用函数后得到的结果。我使用np.fromfunction函数来实现:
f=lambda i,j: np.inner(A1[i],A2[j])
A=np.fromfunction(f, shape=(d1, d1))
(如Fastest way to initialize numpy array with values given by function中建议的)
然而我得到了错误“'IndexError:用作索引的数组必须是整数(或布尔)类型”。这很奇怪,因为将lambda函数更改为例如
f=lambda i,j: i*j
运行正常!似乎在lambda函数中调用另一个函数会导致问题。
np.fromfunction
< p>(np.inner仅是一个示例,我希望能够用其他类似的函数来替换它)。
(np.inner只是一个例子,我希望能够用其他相似的函数来代替它。)
np.fromfunction
不是这个目的的正确函数。你看一下索引i
和j
长什么样子。它们是多余的--没有必要使用i
,j
或f
--因为整个计算可以用np.inner(A1,A2)
完成。 - unutbunp.fromfunction
的作用。在NumPy中没有这样的函数,因为对于大型数组,为每个元组调用Python函数f
会非常慢。为了有效地利用NumPy,通常希望用最少的函数调用表达计算,并将最大的数组传递给这些函数。这将大部分工作转移到NumPy的快速底层C/Fortran函数上,并尽量少依赖较慢的Python代码。 - unutbu