目前尚不清楚为什么要将这些数据放在 numpy 数组中,而字典可能更合适。我假设您想对数据进行一些计算,而您可能不想要字符串 dtype。
在您的示例中,您希望从第一行中的键(可能是字符串)进行排序。如果您想以“方形”形式访问数组(例如像 一样的切片a[:, 2]
),这意味着所有元素都将转换为字符串。结构化数组将允许您进行更好的排序,但代价是必须像a[:][2]
. 这是一个结构化数组的示例,它将您的数据放入具有字符串 dtype 的数组中'names'
,并将值作为 dtype 中的整数'values'
。您可以通过以下字符串进行排序'names'
:
a = np.array([('b', [2, 5, 7]),
('d', [0, 1, 3]),
('z', [3, 9, 2])],
dtype=[('names', 'S1'),
('values', '3int')])
您可以分别访问名称和值记录:
>>> a['names']
array(['b', 'd', 'z'],
dtype='|S5')
>>> a['values']
array([[2, 5, 7],
[0, 1, 3],
[3, 9, 2]])
您可以根据名称的字典排序对值数组进行排序:
>>> a['values'][np.argsort(a['names'])]
array([[2, 5, 7],
[0, 1, 3],
[3, 9, 2]])
或者只是使用名称的另一个顺序对数组进行排序:
>>> a['values'][np.argsort(['z', 'b', 'd'])]
array([[0, 1, 3],
[3, 9, 2],
[2, 5, 7]])