簡體   English   中英

使用numpy數組進行列表理解-錯誤的做法?

[英]list comprehension with numpy arrays - bad practice?

我想知道以下方法是否會被視為不好的做法?如果這樣,是否有人可以為另一種方法提供一些指導。

這是有問題的代碼:

a = np.array([[1,2,3],[4,5,6]])
b = np.array([-5,5])
c = np.array([np.multiply(a[x],b[x]) for x in range(2)])

此處的目的是獲得與'a'形狀相同的數組,其中'a'的第一個元素的值乘以'b'的第一個元素,而第二個元素'a'的值相乘通過“ b”的第二個元素

上面的代碼可以工作,但是考慮到涉及的列表/數組的混合,我不建議這樣做-但對於更優雅的解決方案,我不清楚。 提前謝謝了!

NumPythonic的方法是使用np.newaxis/Noneb的維度擴展為2D數組,然后讓broadcasting開始進行vectorized elementwise multiplication 實現看起來像這樣-

c = a * b[:,None]

擴展尺寸后,您也可以使用np.multiply達到相同的效果,如下所示-

c = np.multiply(a,b[:,None])

最重要的是,以下一些性能數據可以說服您使用broadcasting -

In [176]: a = np.random.rand(2000,3000)

In [177]: b = np.random.rand(2000)

In [178]: %timeit np.array([np.multiply(a[x],b[x]) for x in range(a.shape[0])])
10 loops, best of 3: 118 ms per loop

In [179]: %timeit a * b[:,None]
10 loops, best of 3: 63.8 ms per loop

In [180]: %timeit np.multiply(a,b[:,None])
10 loops, best of 3: 64 ms per loop

暫無
暫無

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

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