Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用位置数据对numpy字符串数组排序_Python_Sorting_Numpy - Fatal编程技术网

Python 使用位置数据对numpy字符串数组排序

Python 使用位置数据对numpy字符串数组排序,python,sorting,numpy,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', 'p0

我有一个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])
如何使用
X
Y
name
进行排序,从而得到一个具有形状(6,6)的名称排序网格?请注意,基本上有6个独特的
X
Y
位置——我不是随意选择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']])

我意识到,在这种情况下,我可以简单地重塑数组,但通常情况下,数据不会很好地解决这个问题。

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

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']]

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

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']]

对我来说,看起来有36个不同的x值和36个不同的y值。恐怕这个问题还不太清楚,无法回答。不过,我认为,
np.argsort
可能是您的解决方案。也许
names=names.reformate(6,6)
?@ThomasKühn同意严格地说,x和y中有36个唯一的值,但是6个值相差约0.01,而其他值相差约0.0001。@ThomasKühn我注意到了这一点,也许应该澄清一下,但我只是颠倒了(
[:-1]
x_顺序
,并对输出进行转置以获得正确的顺序。谢谢对我来说,看起来有36个不同的x值和36个不同的y值。恐怕这个问题还不太清楚,无法回答。不过,我认为,
np.argsort
可能是您的解决方案。也许
names=names.reformate(6,6)
?@ThomasKühn同意严格地说,x和y中有36个唯一的值,但是6个值相差约0.01,而其他值相差约0.0001。@ThomasKühn我注意到了这一点,也许应该澄清一下,但我只是颠倒了(
[:-1]
x_顺序
,并对输出进行转置以获得正确的顺序。谢谢