簡體   English   中英

作為參數發送的numpy.ndarray不需要循環進行迭代嗎?

[英]numpy.ndarray sent as argument doesn't need loop for iteration?

在此代碼中, np.linspace()inputs 200分配從-20到20的均勻間隔的數字。

此功能有效。 我不了解的是它如何工作。 如何將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()

numpy工作方式是定義對向量的運算,而這正是您真正想在數學上使用它們的方式。 因此,我可以做類似的事情:

a = np.arange(10)
b = np.arange(10)
c = a + b

它可以按您希望的那樣工作-將a每個元素添加到b的對應元素中,並將結果存儲在新數組c 如果您想知道numpy是如何做到這一點的,那么都可以通過python數據模型中的magic方法來完成。 特別是在我的示例案例中,numpy的ndarray__add__方法將被覆蓋以提供所需的行為。

您要使用的是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數組中一樣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM