[英]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.