找不到符合這個確切標準的問題/答案,但如果這是一個重復的問題,那么我會洗掉它。是否有與以下代碼等效的 numpy,還是保留我的代碼原樣/使用 xrange 更好?
x = [i for i in range (50)]
y = [i for i in range (120)]
for i in x:
foo = [i z for z in y]
print(foo)
這是一個玩具示例,但我正在使用的資料集的范圍可以從這樣的大小到示例中的 1000 倍;我已經嘗試過,np.idter但沒有看到太多的性能提升,正如我從bmu 的回答中收集到的那樣,使用 range 迭代一個 numpy 陣列是最糟糕的。但是我看不到 ufunc 和索引如何重現與上述相同的結果,這是我想要的結果。
uj5u.com熱心網友回復:
這是廣播的經典應用:
import numpy as np
x = np.arange(0,5).reshape(5,1)
y = np.arange(0,12).reshape(1,12)
foos = x y
print(foos)
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[ 2 3 4 5 6 7 8 9 10 11 12 13]
[ 3 4 5 6 7 8 9 10 11 12 13 14]
[ 4 5 6 7 8 9 10 11 12 13 14 15]]
顯然,像加法這樣的二元運算不能發出多個陣列,但它可以發出一個高維陣列,其中包含所有輸出陣列作為該高維陣列的行或列。
正如評論中所指出的,注意還有一個外積的概括,它在功能上與我展示的廣播方法相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352630.html
