假设我在3个维度中有一个30个点的数组,在python中被转换为numpy数组:
import numpy as np
b = np.round(np.random.random((30,3))*20)
b = b - b.mean(axis=0)
我想把这些点分成八个象限,参考点 Cloud 的“质心” . 我可以这样做:
for a in (b, -b):
q_list = a[a[:,0]>0.][a[a[:,0]>0.][:,1]>0][a[a[:,0]>0.][a[a[:,0]>0.][:,1]>0][:,2]>0]
quad_list.append(q_list * sign)
q_list = a[a[:,0]>0.][a[a[:,0]>0.][:,1]>0][a[a[:,0]>0.][a[a[:,0]>0.][:,1]>0][:,2]<=0]
quad_list.append(q_list * sign)
q_list = a[a[:,0]>0.][a[a[:,0]>0.][:,1]<=0][a[a[:,0]>0.][a[a[:,0]>0.][:,1]<=0][:,2]>0]
quad_list.append(q_list * sign)
q_list = a[a[:,0]>0.][a[a[:,0]>0.][:,1]<=0][a[a[:,0]>0.][a[a[:,0]>0.][:,1]<=0][:,2]<=0]
quad_list.append(q_list * sign)
sign *= -1
当然,这很好用 . 它返回一个包含八个位置坐标数组的列表,每个位置坐标仅包含位于特定象限中的点 . 但是我觉得应该有更清晰,更简洁的方法来处理这个问题 . 建议?