[英]How do I create a 2D array in python?
問題:我正在嘗試使用 for 循環(如以下 matlab 代碼中的最后一行)創建一個二維數組(如代碼中的最后一行):
for i=1:NumLines
J=i-1; J=0,1,2,...
if (mod(J,2)==0)
%Even
gj=gj_even;
else
%Odd
gj=gj_odd;
end
Erot(i)=((B0*J*(J+1))-D0*J^2*(J+1)^2)*planck*c; %correct
dnu_Stokes(i)=-B0*2*(2*J+3)+D0*(3*(2*J+3)+(2*J+3)^3); %2005
Xj_Stokes(i)=(J+1)*(J+2)/(2*J+3); %correct
dRCS_Stokes(i,:)=(112*pi^4/15).*(gj*planck*c*B0*(nu0+dnu_Stokes(i))^4*gammaSquared)./(((2*I+1).^2)*kb*T).*Xj_Stokes(i).*exp(-Erot(i)./(kb*T));
這是我的問題。與 matlab 不同,python 不會為您創建新數組,因此您必須先創建一個空數組,然后才能將值放入其中。 我不斷收到“只有長度為 1 的數組可以轉換為 Python 標量”錯誤。這是我的 Python 嘗試:
dnu_Stokes=np.array([])#empty arrays
Erot= np.array([])
Xj_Stokes=np.array([])
dRcs_Stokes=np.array([])
anti_dnu_Stokes=np.array([])
anti_Xj_Stokes=np.array([])
anti_dRcs_Stokes=np.array([]) #empty arrays
for i in range(1,NumLines):
J= i-1
if (J%2==0):
gj=gj_even
else:
gj=gj_odd
i_Erot = (B0*J*(J+1))-((D0*(J**2))*((J+1)**2)*planck*c)
Erot= np.append(Erot,i_Erot) # append vaues to EROT array (WORKS)
i_dnu_Stokes=-B0*2*(2*J+3)+D0*(3*(2*J+3)+(2*J+3)**3)
dnu_Stokes= np.append(dnu_Stokes,i_dnu_Stokes)# append vaues to dnu_skotes array (wORKS)
i_Xj_Stokes=(J+1)*(J+2)/(2*J+3)
Xj_Stokes= np.append(Xj_Stokes,i_Xj_Stokes) # append vaues to XJ array (WORKS)
dRcs_Stokes[i-1,:]=((112*((math.pi)**4))/15)*(((gj)*planck*c*B0*((nu0+i_dnu_Stokes)**4)*gammaSquared)/(((2*I+1)**2)*kb*T))*(i_Xj_Stokes*(math.exp(((-i_Erot)/(kb*T))))) ###I dont know how to append values to create a 2D array###
這是一個簡單的“hello world”示例,說明您要執行的操作:
arr = []
for row_num in range(5): # add 5 rows. row_num is 0...4
row = []
for col_num in range(6): # add 6 columns. col_num is 0...5
print("computing element for row:", row_num, ", col:", col_num)
element = (row_num * col_num) # this is where you compute each element
row.append(element)
arr.append(row)
arr = np.array(arr)
你應該可以從這里拿走
你知道(或者你能計算出)數組的維度,或者條目的數量嗎?
您可以采用一定長度的一維數組並使用reshape
來更改其尺寸。
例如,假設您提前知道將存儲 100 個值。 您可以預先分配一個零數組,例如:
a = np.zeros(100)
然后以多種方式重塑它:
b = a.reshape(10, 10) # 10x10 2D array
c = a.reshape(2, 5, 10) # 2x5x10 3D array
等等。
索引如您所料:
print(b[0]) # array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
print(b[0][2]) # 0.0
print(c[1][3][8]) # 0.0
您可以使用索引來設置一個值:
b[0][2] = 1.234
print(b[0]) # array([0. , 0. , 1.234, 0. , 0. , 0. , 0. , 0. , 0. , 0. ])
如果您正在使用大型數組,則使用append
會大大降低您的程序速度。
預分配將節省時間和內存,並幫助您捕獲索引錯誤。
希望這有助於重新思考您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.