作为参数发送的numpy.ndarray不需要循环迭代?

时间:2016-02-16 03:23:13

标签: python numpy arguments

在此代码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()

2 个答案:

答案 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数组时那样)。