![](/img/trans.png)
[英]Efficient creation of numpy arrays from list comprehension and in general
[英]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/None
將b
的維度擴展為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.