簡體   English   中英

如何在python中創建二維數組?

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

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