簡體   English   中英

替換二維 numpy 數組中的一行

[英]Replacing a row in 2d numpy array

我正在嘗試替換 2d numpy 數組中的一行。

array2d = np.arange(20).reshape(4,5)
for i in range(0, 4, 1):
    array2d[i] = array2d[i] / np.sum(array2d[i])

但我得到了全 0:

 [[0 0 0 0 0]
     [0 0 0 0 0]
     [0 0 0 0 0]
     [0 0 0 0 0]]

預期的結果是:

[[0 0.1 0.2 0.3 0.4]
 [0.14285714 0.17142857 0.2        0.22857143 0.25714286]
 [0.16666667 0.18333333 0.2        0.21666667 0.23333333]
 [0.17647059 0.18823529 0.2        0.21176471 0.22352941]]

您得到 0 的原因是因為數組的 dtype 是int但除法返回范圍為 0 到 1 的浮點數,並且因為您就地修改行,它們被轉換為整數(即​​在您的示例中為 0)。 所以要修復它使用array2d = np.arange(20, dtype=float).reshape(4,5)

但是不需要 for 循環:

array2d = np.arange(20).reshape(4,5)
array2d = array2d / np.sum(array2d, axis=1, keepdims=True)

請注意,這里我沒有指定數組的 dtype 為 float,但結果數組的 dtype 為 float,因為在第二行我們創建了一個新數組,而不是就地修改第一個數組。

https://numpy.org/doc/stable/user/basics.indexing.html#assigning-values-to-indexed-arrays

暫無
暫無

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

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