亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按列對 2d numpy 字符串/浮點數組進行排序

按列對 2d numpy 字符串/浮點數組進行排序

慕容3067478 2023-07-18 17:35:29
我有以下 numpy 數組(自 1957 年以來該國的火箭發射次數),我想按發射次數的升序對其進行排序。   ['Australia', 6.0],   ['Brazil', 3.0],   ['China', 269.0],   ['France', 303.0],   ['India', 76.0],   ['Iran', 14.0],   ['Israel', 11.0],   ['Japan', 126.0],   ['Kazakhstan', 701.0],   ['Kenya', 9.0],   ['New Zealand', 13.0],   ['North Korea', 5.0],   ['Pacific Ocean', 36.0],   ['Russian Federation', 1398.0],   ['South Korea', 3.0],   ['USA', 1351.0]問題是, np.sort(a, axis = 0) 只對值進行排序,但國家之間沒有聯系,因此 ei 朝鮮發射了 269 枚火箭(可能比 5 枚更有可能)或者,如果我執行 np.sort(a, axis = 1) 那么我會收到一條錯誤消息類型錯誤:“float”和“str”實例之間不支持“<”任何想法將不勝感激!
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

import numpy as np


data = [

   ['Australia', 6.0], 

   ['Brazil', 3.0],

   ['China', 269.0],

   ['France', 303.0],

   ['India', 76.0],

   ['Iran', 14.0],

   ['Israel', 11.0],

   ['Japan', 126.0],

   ['Kazakhstan', 701.0],

   ['Kenya', 9.0],

   ['New Zealand', 13.0],

   ['North Korea', 5.0],

   ['Pacific Ocean', 36.0],

   ['Russian Federation', 1398.0],

   ['South Korea', 3.0],

   ['USA', 1351.0]

]

我們可以創建一個結構化數組,然后按鍵對其進行排序:


dtype = [

    ('name', '<U18'),    

    ('rockets', float)

]


data = np.array([tuple(x) for x in data], dtype=dtype) 

sorted_data = np.sort(data, order=['rockets'])          


print(sorted_data)


查看完整回答
反對 回復 2023-07-18
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

使用 python 列表排序很容易:


In [208]: alist = [   ['Australia', 6.0],

     ...:    ['Brazil', 3.0],

     ...:    ['China', 269.0],

     ...:    ['France', 303.0],

     ...:    ['India', 76.0],

     ...:    ['Iran', 14.0],

     ...:    ['Israel', 11.0],

     ...:    ['Japan', 126.0],

     ...:    ['Kazakhstan', 701.0],

     ...:    ['Kenya', 9.0],

     ...:    ['New Zealand', 13.0],

     ...:    ['North Korea', 5.0],

     ...:    ['Pacific Ocean', 36.0],

     ...:    ['Russian Federation', 1398.0],

     ...:    ['South Korea', 3.0],

     ...:    ['USA', 1351.0]]

In [209]: newlist = sorted(alist, key=lambda x: x[1])

In [210]: newlist

Out[210]: 

[['Brazil', 3.0],

 ['South Korea', 3.0],

 ['North Korea', 5.0],

 ['Australia', 6.0],

 ['Kenya', 9.0],

 ['Israel', 11.0],

 ['New Zealand', 13.0],

 ['Iran', 14.0],

 ['Pacific Ocean', 36.0],

 ['India', 76.0],

 ['Japan', 126.0],

 ['China', 269.0],

 ['France', 303.0],

 ['Kazakhstan', 701.0],

 ['USA', 1351.0],

 ['Russian Federation', 1398.0]]

使用對象 dtype 數組(保留字符串和浮點列):


In [211]: arr = np.array(alist, object)

In [212]: arr

Out[212]: 

array([['Australia', 6.0],

       ['Brazil', 3.0],

       ['China', 269.0],

       ['France', 303.0],

       ...

       ['USA', 1351.0]], dtype=object)

只需查看第二列即可獲取排序索引:


In [213]: idx = np.argsort(arr[:,1])

In [214]: idx

Out[214]: array([ 1, 14, 11,  0,  9,  6, 10,  5, 12,  4,  7,  2,  3,  8, 15, 13])

In [215]: arr[idx]

Out[215]: 

array([['Brazil', 3.0],

       ['South Korea', 3.0],

       ['North Korea', 5.0],

       ['Australia', 6.0],

       ['Kenya', 9.0],

       ...

       ['Russian Federation', 1398.0]], dtype=object)

其他答案中的結構化數組方法也很好。


查看完整回答
反對 回復 2023-07-18
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號