在此代码np.linspace()
中,{-20}分配给inputs
200个均匀间隔的数字。
此功能有效。我不明白的是它是如何工作的。如何inputs
作为参数发送到output_function()
而不需要循环来迭代numpy.ndarray?
def output_function(x):
return 100 - x ** 2
inputs = np.linspace(-20, 20, 200)
plt.plot(inputs, output_function(inputs), 'b-')
plt.show()
答案 0 :(得分:2)
numpy
通过在数学上以你真正想要的方式定义向量的操作来工作。所以,我可以这样做:
a = np.arange(10)
b = np.arange(10)
c = a + b
它可以按照您的意愿运行 - a
的每个元素都会添加到b
的相应元素中,结果存储在新数组c
中。如果你想知道如何 numpy完成这个,它都是通过python数据模型中的魔术方法完成的。特别是在我的示例中,将覆盖numpy __add__
的{{1}}方法以提供所需的行为。
答案 1 :(得分:1)
您要使用的是numpy.vectorize
,其行为与python内置map
类似。
以下是使用numpy.vectorize
的一种方式:
outputs = (np.vectorize(output_function))(inputs)
你问为什么它有效,它的工作原理是因为numpy数组可以集中对其数组元素执行操作,例如:
a = np.array([1,2,3,4]) # gives you a numpy array of 4 elements [1,2,3,4]
b = a - 1 # this operation on a numpy array will subtract 1 from every element resulting in the array [0,1,2,3]
由于numpy数组的这个属性,您可以非常快速地对numpy数组的每个元素执行某些操作,而无需使用循环(就像它是常规python数组时那样)。