Python 使用位置数据对numpy字符串数组排序
我有一个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
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_顺序
,并对输出进行转置以获得正确的顺序。谢谢