Есть ли способ сортировки массива по второму столбцу от максимального значения к минимальному? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь отсортировать мой массив "factor_groups" по второму столбцу, который содержит значения f_pow, от самого высокого до самого низкого.В конечном счете, я пытаюсь создать точечную диаграмму из трех значений: f_cond на оси x, f_mom на y и использование цвета для определения значения f_pow (0,7, 0,8 или 0,9) и размерамаркер, указывающий, как часто он появляется в массиве factor_group.Значение f_pow_count будет использоваться для размера маркера, и его нужно отсортировать от самого высокого к низшему, чтобы маркеры самых больших размеров наносились первыми и не покрывали меньшие.

Я пробовал функцию argsort, но не могу заставить ее работать.

f_cond_plot=[]
f_pow_plot=[]
f_mom_plot=[]
factor_group={}
distinct_sets=[]


data_file = open('Ti=Te.csv')
csv_f = csv.reader(data_file)


for row in csv_f:

    if i == 16:
        #print("end")
        break
    else:
        #print(i)
        Te_t[i] = float(row[3])
        Ti_t[i] = float(row[4])
        n_t[i] = float(row[5])
        L[i] = float(row[10])
        Te_u_div[i] = float(row[6])
        Ti_u_div[i] =  float(row[7])
        n_u_div[i] = float(row[8])
        q_par_div[i] = float(row[9])
        Tu_div[i] = float(Te_u_div[i]+Ti_u_div[i])
        c_s_div[i] = float(row[11])
        radius[i] = (row[0])
        IR_div[i] = float(row[2])

        i = i+1

f_cond=np.linspace(.1,.9,9)     
f_pow=np.linspace(.1,.9,9)
f_mom=np.linspace(.1,.9,9)

for a in f_cond:
    s=s+1
    for b in f_pow:
        for c in f_mom:
            factor[z]=[a,b,c]

            if y == 2:
                for x in range(0, len(Te_t)):

                     gamma = 7
                     c_s[x] = np.power([k_b*(Ti_t[x]+Te_t[x])*K_ev/(m_e+m_i)] , 0.5)
                     #print(c_s[x])
                     q_par[x] = gamma*n_t[x]*k_b*K_ev*(Ti_t[x]+Te_t[x])*c_s[x]*(1-b)
                     Tu[x] = np.power(np.power(Ti_t[x]+Te_t[x], (7/2))+(7/2)*a*q_par[x]*L[x]/ko_e , (2/7))
                     n_u_simp[x] = 2*n_t[x]*(Ti_t[x]+Te_t[x])/(c*Tu[x])
                     n_u_com[x] = np.power(m_i/(2*e*(Ti_t[x]+Te_t[x]))*4*np.power(q_par[x], 2)*np.power((7/2)*q_par[x]*L[x]/ko_e, (-4/7))/(np.power(gamma, 2)*e**2), 0.5)/c


                     if cs_lower_bound < c_s[x]/c_s_div[x] < cs_upper_bound and Tu_lower_bound < Tu[x]/Tu_div[x] < Tu_upper_bound and q_par_lower_bound < q_par[x]/q_par_div[x] < q_par_upper_bound:     
                        #This If statement has no bounds on q_par
                        #and 0.1 < q_par[x]/q_par_div[x] < 10

                        if nu_lower_bound < n_u_com[x]/n_u_div[x] < nu_upper_bound:
                            #nor u_lower_bound < n_u_simp[x]/n_u_div[x] < nu_upper_bound 

                            f_cond_plot.append(a)
                            f_pow_plot.append(b)
                            f_mom_plot.append(c)

                            f_cond_avg.append(a)
                            f_pow_avg.append(b)
                            f_mom_avg.append(c)

                            if x==0:
                                IR10_cnt=IR10_cnt+1
                            elif x==1:
                                IR11_cnt=IR11_cnt+1
                            elif x==2:
                                IR12_cnt=IR12_cnt+1
                            elif x==3:
                                IR13_cnt=IR13_cnt+1
                            elif x==4:
                                IR14_cnt=IR14_cnt+1
                            elif x==5:
                                IR15_cnt=IR15_cnt+1
                            elif x==6:
                                IR16_cnt=IR16_cnt+1
                            elif x==7:
                                IR17_cnt=IR17_cnt+1
                            elif x==8:
                                IR18_cnt=IR18_cnt+1
                            elif x==9:
                                IR19_cnt=IR19_cnt+1
                            elif x==10:
                                IR20_cnt=IR20_cnt+1
                            elif x==11:
                                IR21_cnt=IR21_cnt+1
                            elif x==12:
                                IR22_cnt=IR22_cnt+1
                            elif x==13:
                                IR23_cnt=IR23_cnt+1
                            elif x==14:
                                IR24_cnt=IR24_cnt+1
                            elif x==15:
                                IR25_cnt=IR25_cnt+1

                            number=number+1

            #cs_ratio=c_s/c_s_div
            Tu_ratio=Tu/Tu_div
            q_par_ratio=q_par/q_par_div
            nu_simp_ratio=n_u_simp/n_u_div
            nu_com_ratio=n_u_com/n_u_div

            #ratio[z]=["factors", factor[z], "Tu ratio" ,Tu_ratio, "heat flux ratio", q_par_ratio,"simple denisty ratio", nu_simp_ratio,"complex denisty ratio", nu_com_ratio]
            z=z+1  


f_cond_avg=np.array(f_cond_avg)
f_pow_avg=np.array(f_pow_avg)
f_mom_avg=np.array(f_mom_avg)


for t in range(0,number):
    factor_group [t]=[f_cond_plot[t], f_pow_plot[t], f_mom_plot[t]]       

print("first",factor_group)
count_pow_7=0
count_pow_8=0
count_pow_9=0
f_pow_color=np.zeros(len(f_pow_plot), dtype=str)

#Finds the value of f_pow that occurs most
for c in range(0,len(f_pow_plot)):
    if f_pow_plot[c]==0.7000000000000001:
        count_pow_7=count_pow_7+1
        f_pow_color[c]="blue"
        #print("0.7)",count_pow_7)

    elif f_pow_plot[c]==0.8:
        count_pow_8=count_pow_8+1
        f_pow_color[c]="red"
        #print("0.8)",count_pow_8)

    elif f_pow_plot[c]==0.9:
        count_pow_9=count_pow_9+1
        f_pow_color[c]="yellow"
        #print("0.9)",count_pow_9)

print("0.7)",count_pow_7)
print("0.8)",count_pow_8)            
print("0.9)",count_pow_9)

factor_group = np.argsort(factor_group,1)

print("sorted",factor_group)

plt.scatter(f_cond_plot, f_mom_plot, c=f_pow_color, s=factor_group[1])
plt.title("Scatter plot of factor sets that meet conditions")
plt.xlabel("Conduction Factor")
plt.ylabel("Momentum Factor")
plt.legend(f_pow_plot)
plt.show

Я получаю сообщение об ошибке: AxisError: ось 1 выходит за границы массива измерения 1

...