[英]How do I take the reciprocal of all non-zero entries in a numpy array
我試圖取一個 numpy 數組中每個非零值的倒數,但我搞砸了。 認為:
norm = np.arange(0,11)
我想要 np.array 那將是(保持零到位)
[ 0, 1, 0.5 , 0.33, 0.25, 0.2 , 0.17, 0.14, 0.12, 0.11, 0.1]
如果我設置
mask = norm !=0
我嘗試
1/norm[mask]
我收到了預期的結果
[1, 0.5 , 0.33, 0.25, 0.2 , 0.17, 0.14, 0.12, 0.11, 0.1]
但是我試圖理解為什么當我嘗試以下任務時
norm[mask] = 1/norm[mask]
我得到以下 numpy 數組。
[0,1,0,0,0,0,0,0,0,0,0]
關於為什么會這樣或如何實現所需的 np.array 的任何想法?
您確定您沒有意外更改norm
的值嗎?
兩個都
mask = norm != 0
norm[mask] = 1 / norm[mask]
和
norm[norm != 0] = 1 / norm[norm != 0]
兩者都做你想讓他們做的事情。 我也嘗試過在左側使用mask
並在右側使用norm != 0
,就像你上面所做的那樣(為什么?)並且它工作正常。
FY 編輯:我誤讀了這個例子。 我認為原始海報以 [0, .5, .333, .25] 而不是 [0, 1, 2, 3, 4] 開頭。 海報意外地創建了一個 int64 數組而不是一個浮點數組,並且所有內容都向下舍入為零。 將其更改為np.arange(0., 11.)
另一個選項是使用numpy.reciprocal
,如此處記錄的那樣,帶有一個參數where
如下所示:
import numpy as np
data = np.reciprocal(data,where= data!=0)
例子:
In[1]: data = np.array([2.0,4.0,0.0])
in[2]: np.reciprocal(data,where=data!=0)
Out[9]: array([0.5 , 0.25, 0. ])
請注意,此函數不適用於ints
,因此初始化值帶有.0
后綴。 如果您不確定類型,您可以隨時使用data.astype(float64)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.