【发布时间】:2021-03-26 09:56:49
【问题描述】:
假设我在 numpy 中有一个由 2 个变量 x 和 y 参数化的矩阵乘法函数:
import numpy as np
def func(x, y):
a = np.array([[1, x],
[x, 2]])
b = np.array([[y, 2*x],
[x, np.exp(y+x)]])
M = np.array([[3.2, 2*1j],
[4 , 93]])
prod = a @ M @ b
final = np.abs(prod[0,0])
return final
我可以轻松地为任意两个数值运行此函数,例如func(1.1, 2.2) 返回129.26...。
到目前为止一切顺利,但现在我想为 x 和 y 的几个值运行它,例如x=np.linspace(0,10,500) 和 y=np.linspace(0,10,500)。我想将这 500 个值一对一对应,即x 列表中的第一个与y 列表中的第一个,第二个与第二个,等等。
我可以通过在函数中添加一个for 循环来做到这一点,但是在我的实际代码中该过程变得非常慢(这比这里的这个例子对计算的要求更高)。我想寻求支持的是如何仅使用 numpy 函数更快地做到这一点? 这就是 numpy ufunc 的意思吗?没看过。
【问题讨论】:
-
你知道如何从
x制作一个 (500,2,2) 形状的数组吗?@可以处理这样的 3d 数组,将维度视为“批次”。 -
“我从来没有调查过。”。你真的应该在问之前先调查一下。请做你自己的研究!
标签: python numpy optimization numpy-ndarray numpy-ufunc