2014-02-10 39 views
2

如何縮短以下代碼?這是一個簡單的代碼,可以查看角度值並確保它們不會超出範圍。問題是,雖然這是做這項工作,但我真的想要更pythonic,更易於使用,而且寫起來更麻煩。將自然範圍以外的角度(θ:0至180度)轉換爲該範圍內的等效角度

theta_min_lim = 0.0 
theta_max_lim = 180.0 
if theta_min<theta_min_lim: 
    new_theta_min = theta_max_lim-abs(theta_min) 
    theta_row_index_along_new = np.array(np.where(sph_pos_count[:,1]>=new_theta_min)).flatten() 
    theta_row_index_along = np.concatenate((theta_row_index_along_new, theta_row_index_along)) 

if theta_max>theta_max_lim: 
    new_theta_max = theta_max-theta_max_lim 
    theta_row_index_along_new = np.array(np.where(sph_pos_count[:,1]<=new_theta_max)).flatten() 
    theta_row_index_along = np.concatenate((theta_row_index_along_new, theta_row_index_along)) 

if phi_min<phi_min_lim: 
    new_phi_min = phi_max_lim-abs(phi_min) 
    phi_row_index_along_new = np.array(np.where(sph_pos_count[:,2]>=new_phi_min)).flatten() 
    phi_row_index_along = np.concatenate((phi_row_index_along_new, phi_row_index_along)) 

if phi_max>phi_max_lim: 
    new_phi_max = phi_max-phi_max_lim 
    phi_row_index_along_new = np.array(np.where(sph_pos_count[:,2]<=new_phi_max)).flatten() 
    phi_row_index_along = np.concatenate((phi_row_index_along_new, phi_row_index_along)) 

#theta_row_index_along = np.concatenate(theta_row_index_along_new, theta_row_index_along) 
row_index_along = np.intersect1d(theta_row_index_along,phi_row_index_along) 

sph_pos_count_along = sph_pos_count[row_index_along] 

#GIving range for theta and phi in the direction along the velocity 
theta_min_opp = vtheta_opp - 2.0*max(sph_cord[:,1])/dtheta 
theta_max_opp = vtheta_opp + 2.0*max(sph_cord[:,1])/dtheta 
phi_min_opp = vphi_opp - 2.0*max(sph_cord[:,2])/dphi 
phi_max_opp = vphi_opp + 2.0*max(sph_cord[:,2])/dphi 

#Finding index of spheres opposite to the direction of motion 

theta_row_index_opp = np.array(np.where(np.logical_and(sph_pos_count[:,1]>=theta_min_opp, sph_pos_count[:,1]<=theta_max_opp))).flatten() 
phi_row_index_opp = np.array(np.where(np.logical_and(sph_pos_count[:,2]>=phi_min_opp, sph_pos_count[:,2]<=phi_max_opp))).flatten() 

if theta_min_opp<theta_min_lim: 
    new_theta_min_opp = theta_max_lim-abs(theta_min_opp) 
    theta_row_index_opp_new = np.array(np.where(sph_pos_count[:,1]>=new_theta_min_opp)).flatten() 
    theta_row_index_opp = np.concatenate((theta_row_index_opp_new, theta_row_index_opp)) 

if theta_max_opp>theta_max_lim: 
    new_theta_max_opp = theta_max_opp-theta_max_lim 
    theta_row_index_opp_new = np.array(np.where(sph_pos_count[:,1]<=new_theta_max_opp)).flatten() 
    theta_row_index_opp = np.concatenate((theta_row_index_opp_new, theta_row_index_opp)) 

if phi_min_opp<phi_min_lim: 
    new_phi_min_opp = phi_max_lim-abs(phi_min_opp) 
    phi_row_index_opp_new = np.array(np.where(sph_pos_count[:,2]>=new_phi_min_opp)).flatten() 
    phi_row_index_opp = np.concatenate((phi_row_index_opp_new, phi_row_index_opp)) 

if phi_max_opp>phi_max_lim: 
    new_phi_max_opp = phi_max_opp-phi_max_lim 
    phi_row_index_opp_new = np.transpose(np.where(sph_pos_count[:,2]<=new_phi_max_opp)).flatten() 
    phi_row_index_opp = np.concatenate((phi_row_index_opp_new, phi_row_index_opp)) 

回答

4

只需使用模運算(模%運營商在Python):

theta = theta % 180 

對於-30,這給你150。對於190,這會給你10

+1

請注意,您也可以執行模運算:'theta%= 180' –