python - 根据特定列对 numpy-array 进行排序
问题描述
考虑一个 numpy 数组,如下所示:
coords = [[34. 22.]
[11. 38.]
[22. 56.]
[23. 22.]
[86. 30.]]
该数组包含 5 个点的 x 和 y 坐标。我正在寻找这个数组中具有最小 y 坐标的点。我可以很容易地找到它
idx = np.argpartition(coords[:,1],1)[0]
pt = coords[idx]
没问题。除了实际上有两个点coords
具有相同的最小 y 值:22
我想要具有较小 x 值的点,而不是[34 22]
我想要的[23 22]
。
这不再是微不足道的。因为我希望能够为任意坐标矩阵找到这样的点。即,可能有许多点具有相同的最小 y 坐标。不止两个。然后我想根据它们的 x 坐标对它们进行排序。
我开始用一个丑陋的 for 循环解决这个问题,但失败了。这是我到目前为止所拥有的:
noPoints = coords.shape[0]
y = []
for i in range(0, noPoints-1):
minIdx = 0
for j in range(i+1, noPoints):
if coords[j][1] < coords[i][1]:
minIdx = j
出色地。我可以找到最小的 y 值。但就是这样。我开始相信这个任务不能用 numpy-arrays 解决。
解决方案
您可以使用结构化的 numpy 数组和numpy 的 sortorder=
中的可选关键字来做到这一点:
>>> x = np.array([(34.,22.),(11., 38.),(22.,56.),(23., 22.),(86.,30.)], dtype = [('x',float),('y',float)])
>>> x
array([(34., 22.), (11., 38.), (22., 56.), (23., 22.), (86., 30.)],
dtype=[('x', '<f8'), ('y', '<f8')])
>>> x.sort(order = ['y','x'])
>>> x
array([(23., 22.), (34., 22.), (86., 30.), (11., 38.), (22., 56.)],
dtype=[('x', '<f8'), ('y', '<f8')])
推荐阅读
- reactjs - 为什么我无法在 create-react-app 中初始化 git?
- java - 从 GitHub 转贴:Spring Boot 应用程序无法启动并出现错误“java.lang.NoSuchMethodError
- java - 如何为 BBP 算法做 base 16 来获得 PI
- dart - Dart 中的新功能
- keras - 我需要有状态还是无状态的 LSTM?
- django - 如何从 Django 中的 post 请求中检索数据?
- android - 将 FrameLayout 中的片段与另一个片段进行比较
- laravel - fullcalendar 中的日历未显示
- python-3.x - 从 .p (picked) 文件构建 networkx Graph
- django - 从 Openshift 集群外部访问时,来自 Openshift Origin 托管的 Django Web 服务的空回复