此應用程式用于分析天體物理資料,但問題純粹是編程/語法問題。我想通過我的 53 個資料箱(每個 1D 星系光譜在星系的不同半徑)并執行一些演算法來確定運動學引數,例如每個箱/半徑的旋轉速度和速度分散。有人能告訴我我在 for 回圈中做錯了什么嗎,我想在我的半徑陣列中獲得 53 個值,但只有 2 個(大概是第一個和最后一個)。我以為我會從第一個值開始radius_center,然后 usingnp.append()將在每次回圈迭代時將半徑的下一個值附加到陣列中,所以最后我會在陣列中得到 53 個值。
for bin in (1, 53):
gal_data = np.loadtxt('C:/Users/bins/' str(bin) '_upper.txt')
loglam_gal = gal_data[0, :]
flux_gal = gal_data[1, :]
gh_moments = fcq_application(loglam_temp, flux_temp, loglam_gal, flux_gal)[0]
z = fcq_application(loglam_temp, flux_temp, loglam_gal, flux_gal)[1]
radius = gal_data[2, 2]
radius_arr = np.append(radius_center, radius)
編輯:在@Jér?me Richard 之后,我用串列做了所有事情,我在 for 回圈之前用起始值初始化了它。問題是現在我在回圈運行后串列中有 3 個值,而不是 53,我不知道為什么.. 這是代碼:
for bin in (1, 53):
gal_data = np.loadtxt('C:/Users/reich/OneDrive/Dokumente/Uni/Bachelorarbeit/Python/bins/' str(bin) '_upper.txt')
loglam_gal = gal_data[0, :]
flux_gal = gal_data[1, :]
gh_moments, z, *_ = fcq_application(loglam_temp, flux_temp, loglam_gal, flux_gal)
radius = gal_data[2, 2]
radius_list.append(radius)
vel_rot = np.abs(vel_rot_center-gh_moments[0])
vel_rot_list.append(vel_rot)
vel_disp = gh_moments[1]
vel_disp_list.append(vel_disp)
h3 = gh_moments[2]
h3_list.append(h3)
h4 = gh_moments[3]
h4_list.append(h4)
z_list.append(z)
signal_to_noise = gal_data[3, 3]
signal_to_noise_list.append(signal_to_noise)
uj5u.com熱心網友回復:
for bin in (1,53):將被(1,53)視為僅包含 1 和 53 的元素的元組,以實際通過您需要的范圍for bin in range(1,54)(54 而不是 53,因為它不包括最后一個元素)。
radius_arr = np.empty(53) # pre-allocate a numpy array of length 53
# btw if you wanted radius_center to be the first value, you'd want to do
# radius_arr = np.empty(54)
# radius_arr[0] = radius_center
# then in the for loop use radius_arr[i] = radius instead of radius_arr[i-1]
for i in range(1,54):
gal_data = np.loadtxt('C:/Users/bins/' str(bin) '_upper.txt')
loglam_gal = gal_data[0, :]
flux_gal = gal_data[1, :]
gh_moments = fcq_application(loglam_temp, flux_temp, loglam_gal, flux_gal)[0]
z = fcq_application(loglam_temp, flux_temp, loglam_gal, flux_gal)[1]
radius = gal_data[2, 2]
radius_arr[i-1] = radius
對于一般知識,如果您確實想使用 append,您可以使用類似于以下內容的內容:
radius_arr = np.array([radius_center]) # this is very inefficient
radius_list = [radius_center] # this is better
for i in range(1,54):
...
radius_arr = radius_arr.append(radius) # this is very inefficient
radius_list.append(radius) # doing it with a list first and appending the values is better
radius_list = np.array(radius_list) # can convert a list to a numpy array
蟒蛇元組
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473660.html
