假设我有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)
,以及一些如何将索引的顺序分配给年龄值的方法。我考虑过使用循环,但我不知道如何?有人可以帮帮我吗?谢谢
答案 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)