我正在尝试使用numpy数组,我遇到了以下问题。我试图找到一种方法来映射一个函数,该函数将矩阵作为输入数组,以便该函数应用于两个或多个矩阵的成对元素,其中这些元素是数组。
var nodesArray = [].slice.call(document.querySelectorAll('li'));
列表推导的问题在于,我担心它们效率低下,因为它们是Python功能而不是Numpy功能。
答案 0 :(得分:2)
您可以将x
和y
相乘,然后按行对结果求和:
(x * y).sum(1)
# array([12665, 10625, 10619, 2492, 8681])
或使用numpy.einsum
:
np.einsum("ij,ij->i", x, y)
# array([12665, 10625, 10619, 2492, 8681])
答案 1 :(得分:1)
如果该函数是仲裁函数,那么您可能必须使用列表推导或某些等效迭代
z = [f(row_x, row_y) for row_x, row_y in zip(x,y)]
其中x
和y
是(n,m)数组,而z
将是(n,?)
。
此迭代适用于x
和y
的第一维,将数组视为数组列表。
正如你发现vectorize
没有做你想做的事情,因为它在元素方面起作用,就是它传递标量,而不是行传递给函数。
正如另一个答案所示,很容易将dot
产品表达为逐行工作的东西。尽可能采取这种方式。查看计算的组成部分,并询问哪些元素按元素逐行操作,逐行操作等。许多基本的数学函数都以这种方式工作。但有些操作仅适用于1d数组,例如unique
和in1d
。
在尝试提出适用于任意函数的内容之前,请学习如何在更简单的情况下使用多维数组。你会以这种方式得到更多。