ディクショナリがおそらくより適切であるのに、なぜこのデータを 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]])