如何在python中对索引排序后按顺序打印数组中的值?

时间:2018-07-16 04:08:20

标签: python sorting numpy

假设我有2个向量,身高和年龄。

ages = np.random.randint(low=20, high=60, size=10)
heights = np.random.randint(low=150, high=200, size=10)

年龄向量的每个值将对应一个高度值。我想按顺序打印年龄及其相应的高度。我相信我必须首先对年龄指数进行排序

a = np.argsort(ages)

,以及一些如何将索引的顺序分配给年龄值的方法。我考虑过使用循环,但我不知道如何?有人可以帮帮我吗?谢谢

2 个答案:

答案 0 :(得分:0)

repo forall -c 'git checkout origin/otira_development'函数按排序顺序为您提供数组的索引-使用索引-

np.argsort

请注意,在这种情况下,您可以考虑使用结构化数组:

>>> ages = np.random.randint(low=20, high=60, size=10)
>>> heights = np.random.randint(low=150, high=200, size=10)
>>> ages
array([44, 35, 37, 39, 48, 24, 22, 25, 22, 59])
>>> heights
array([179, 195, 158, 189, 183, 185, 186, 187, 161, 175])
>>> ia = np.argsort(ages)
>>> ages[ia]
array([22, 22, 24, 25, 35, 37, 39, 44, 48, 59])
>>> heights[ia]
array([186, 161, 185, 187, 195, 158, 189, 179, 183, 175])

现在您可以将“ order”参数传递给>>> mytype = np.dtype([('age',int), ('height', int)]) >>> data = np.array(list(zip(ages, heights)), dtype=mytype) >>> data array([(44, 179), (35, 195), (37, 158), (39, 189), (48, 183), (24, 185), (22, 186), (25, 187), (22, 161), (59, 175)], dtype=[('age', '<i8'), ('height', '<i8')])

.sort

但是,这并不完全等同于上面,因为它使用高度来打破平局,因此请注意,>>> data.sort(order='age') >>> data array([(22, 161), (22, 186), (24, 185), (25, 187), (35, 195), (37, 158), (39, 189), (44, 179), (48, 183), (59, 175)], dtype=[('age', '<i8'), ('height', '<i8')]) 在此处(22, 161)之前。

答案 1 :(得分:0)

您可以使用纯python执行此操作。如果您要对所有唯一值进行排序,则可以使用临时字典:

ages = [2,4,1,6]
heights = [3,4,2,6]

temp = {}
for age, height in zip(ages, heights):
    temp[age] = height

for key in sorted(temp):
    print(key, temp[key])

如果具有非唯一值,则可以使用临时数组:

ages = [2,4,1,6,2]
heights = [3,4,2,6,7]

temp = []
for age, height in zip(ages, heights):
     temp.append((age, height))

for age, height in sorted(temp):
     print(age, height)