我想了解為什么我的陣列的結構是這樣的:
import numpy as np
import math
n=10
P=np.array([[0]*n]*n)
P[2][2]=1 #It works as I want
for i in range(n):
for j in range(n):
P[i][j]=math.comb(n,j 1)*((i 1)/n)**(j 1)*(1-(i 1)/n)**(n-j-1)
print(math.comb(n,j 1)*((i 1)/n)**(j 1)*(1-(i 1)/n)**(n-j-1))
print(P)
結果,對于 P,我得到一個只有 0 的陣列,除了 (n,n) 位置的 1,但列印的值不是 0。
我想這是因為我將 [[0]*n]*n 用于具有可變/不可變變數的串列,因為它在我使用 np.zeros() 時效果很好,但我不明白為什么它在我手動設定值(例如 P[2][2]=1)
謝謝
uj5u.com熱心網友回復:
您創建陣列的方式默認為整數 dtype,因為如果您沒有明確設定它,它會使用第一個值來確定型別。您可以通過嘗試分配一個浮點數而不是一個 int 來證明這一點
P[2][2]=1 #It works as I want
P[2][2]=0.3 #It doesn't work
要使用您的方法,您需要創建一個帶有 a dtypeof float 的陣列,這樣值就不會被剪裁:P=np.array([[0.0]*n]*n)或P=np.array([[0]*n]*n, dtype=float).
這將產生一個預期值的陣列:
array([[3.87420489e-01, 1.93710245e-01, 5.73956280e-02, 1.11602610e-02,
1.48803480e-03, 1.37781000e-04, 8.74800000e-06, 3.64500000e-07,
9.00000000e-09, 1.00000000e-10],
[2.68435456e-01, 3.01989888e-01, 2.01326592e-01, 8.80803840e-02,
2.64241152e-02, 5.50502400e-03, 7.86432000e-04, 7.37280000e-05,
4.09600000e-06, 1.02400000e-07],
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444846.html
標籤:Python 数组 python-3.x 列表 麻木的
下一篇:遍歷json物件結構包含陣列
