使用位置数据

时间:2018-02-02 13:41:56

标签: python sorting numpy

我有一个numpy字符串数组

names = array([
    'p00x00', 'p01x00', 'p02x00', 'p03x00', 'p04x00', 'p05x00',
    'p00x01', 'p01x01', 'p02x01', 'p03x01', 'p04x01', 'p05x01',
    'p00x02', 'p01x02', 'p02x02', 'p03x02', 'p04x02', 'p05x02',
    'p00x03', 'p01x03', 'p02x03', 'p03x03', 'p04x03', 'p05x03',
    'p00x04', 'p01x04', 'p02x04', 'p03x04', 'p04x04', 'p05x04',
    'p00x05', 'p01x05', 'p02x05', 'p03x05', 'p04x05', 'p05x05'])

和相应的位置数据

X = array([2.102235, 2.094113, 2.086038, 2.077963, 2.069849, 2.061699])
Y = array([-7.788431, -7.780364, -7.772306, -7.764247, -7.756188, -7.748114])

如何使用namesXY进行排序,以便我找到一个有形状(6,6)的名称排序网格?请注意,基本上有6个独特的XY位置 - 我不只是随意选择6x6。

names = array([
    ['p00x00', 'p01x00', 'p02x00', 'p03x00', 'p04x00', 'p05x00'],
    ['p00x01', 'p01x01', 'p02x01', 'p03x01', 'p04x01', 'p05x01'],
    ['p00x02', 'p01x02', 'p02x02', 'p03x02', 'p04x02', 'p05x02'],
    ['p00x03', 'p01x03', 'p02x03', 'p03x03', 'p04x03', 'p05x03'],
    ['p00x04', 'p01x04', 'p02x04', 'p03x04', 'p04x04', 'p05x04'],
    ['p00x05', 'p01x05', 'p02x05', 'p03x05', 'p04x05', 'p05x05']])

我意识到在这种情况下我可以简单地重塑阵列,但一般来说数据不会很好地解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用numpy.argsort在排序后获取数组元素的索引。然后,您可以使用这些索引对names数组进行排序。

import numpy as np

names = np.array([
    'p00x00', 'p01x00', 'p02x00', 'p03x00', 'p04x00', 'p05x00',
    'p00x01', 'p01x01', 'p02x01', 'p03x01', 'p04x01', 'p05x01',
    'p00x02', 'p01x02', 'p02x02', 'p03x02', 'p04x02', 'p05x02',
    'p00x03', 'p01x03', 'p02x03', 'p03x03', 'p04x03', 'p05x03',
    'p00x04', 'p01x04', 'p02x04', 'p03x04', 'p04x04', 'p05x04',
    'p00x05', 'p01x05', 'p02x05', 'p03x05', 'p04x05', 'p05x05'])

X = np.array([2.102235, 2.094113, 2.086038, 2.077963, 2.069849, 2.061699])
Y = np.array([-7.788431, -7.780364, -7.772306, -7.764247, -7.756188, -7.748114])

x_order = np.argsort(X)
y_order = np.argsort(Y)

names_ordered = names.reshape(6,6)[np.meshgrid(x_order,y_order)]

print(names_ordered)

给出以下输出:

[['p00x05' 'p00x04' 'p00x03' 'p00x02' 'p00x01' 'p00x00']
 ['p01x05' 'p01x04' 'p01x03' 'p01x02' 'p01x01' 'p01x00']
 ['p02x05' 'p02x04' 'p02x03' 'p02x02' 'p02x01' 'p02x00']
 ['p03x05' 'p03x04' 'p03x03' 'p03x02' 'p03x01' 'p03x00']
 ['p04x05' 'p04x04' 'p04x03' 'p04x02' 'p04x01' 'p04x00']
 ['p05x05' 'p05x04' 'p05x03' 'p05x02' 'p05x01' 'p05x00']]