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

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

如何將矩陣的條目標記為其索引但仍保留其原始數值?

如何將矩陣的條目標記為其索引但仍保留其原始數值?

鳳凰求蠱 2022-06-22 16:31:49
我有一個充滿數值的matrix_1,我想做的是將其轉換為matrix_2,其中的值(對matrix_1 排序),然后用matrix_1 中的原始索引替換矩陣2 中的這些排序值。我不想使用任何循環,因為矩陣相當大。for example : matrix_1=[[2,3,4,1],[6,5,9,7]]I want to end up with matrix_2=[[(1,4),(1,1),(1,2),(1,3)],                                 [(2,2),(2,1),(2,4),(2,3)]]我已經嘗試在原始矩陣上使用 np.ndenumerate 但它返回 array([numpy.ndenumerate object at 0x1a1a9fce90], dtype=object)我現在也嘗試過 np.argsort() 但它似乎不起作用,可能是因為我所有的條目都是浮點數......
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

argsort應用于展平陣列:


In [110]: np.argsort(arr1.ravel())                                              

Out[110]: array([3, 0, 1, 2, 5, 4, 7, 6])

將其轉換為 2d 索引:


In [111]: np.unravel_index(_,(2,4))                                             

Out[111]: (array([0, 0, 0, 0, 1, 1, 1, 1]), array([3, 0, 1, 2, 1, 0, 3, 2]))

將數組合并為一個,并重塑:


In [112]: np.transpose(_)                                                       

Out[112]: 

array([[0, 3],

       [0, 0],

       [0, 1],

       [0, 2],

       [1, 1],

       [1, 0],

       [1, 3],

       [1, 2]])

In [113]: _+1           # tweak values to match yours

Out[113]: 

array([[1, 4],

       [1, 1],

       [1, 2],

       [1, 3],

       [2, 2],

       [2, 1],

       [2, 4],

       [2, 3]])

In [114]: _.reshape(2,4,2)                                                      

Out[114]: 

array([[[1, 4],

        [1, 1],

        [1, 2],

        [1, 3]],


       [[2, 2],

        [2, 1],

        [2, 4],

        [2, 3]]])


查看完整回答
反對 回復 2022-06-22
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

使用 np.argsort 應該可以解決問題:


matrix_1=np.array([[2,3,4,1],[6,5,9,7]])

matrix_1

array([[2, 3, 4, 1],

       [6, 5, 9, 7]])

x = np.argsort(matrix_1,axis=1)

array([[3, 0, 1, 2],

       [1, 0, 3, 2]], dtype=int64)

由浮點數組成的矩陣不應該造成問題。


然后,您可以將列表創建為:


[[(i+1,v+1)   for v in enumerate(y)] for i, y in enumerate(x.tolist())]

[[(1, 4), (1, 1), (1, 2), (1, 3)], [(2, 2), (2, 1), (2, 4), (2, 3)]]


查看完整回答
反對 回復 2022-06-22
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

您必須來自 R 或其他開始索引的語言1。在 Python 中,索引從 開始0,因此您必須顯式添加+ 1索引以使其從 1 開始。


使用argsort然后reshape


m1 = matrix_1.argsort(1) + 1

i = (np.repeat(np.arange(m1.shape[0]), m1.shape[1]) + 1).reshape(m1.shape)

np.concatenate([m1[:, None],i[:, None]], axis=1).swapaxes(2,1)

哪個輸出


array([[[4, 1],

        [1, 1],

        [2, 1],

        [3, 1]],


       [[2, 2],

        [1, 2],

        [4, 2],

        [3, 2]]])


查看完整回答
反對 回復 2022-06-22
  • 3 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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