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

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

根據給定的索引對列表連接二維數組的行的有效方法

根據給定的索引對列表連接二維數組的行的有效方法

小唯快跑啊 2023-06-27 13:23:47
假設我有一個包含大量行的二維數組,以及該數組的索引對列表。我想創建一個新的 2 維數組,其行是原始數組的行的串聯,根據索引對列表制作。例如:a = 1 2 34 5 67 8 90 0 0indexes = [[0,0], [0,1], [2,3]]返回的數組應該是:1 2 3 1 2 31 2 3 4 5 67 8 9 0 0 0顯然我可以迭代索引列表,但我的問題是是否有更有效的方法來做到這一點。我應該說索引列表也非常大。
查看完整描述

3 回答

?
POPMUISE

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

首先將索引轉換為Numpy數組:

ind = np.array(indexes)

然后生成結果為:

result = np.concatenate([a[ind[:,0]], a[ind[:,1]]], axis=1)

結果是:

array([[1, 2, 3, 1, 2, 3],
       [1, 2, 3, 4, 5, 6],
       [7, 8, 9, 0, 0, 0]])

另一個可能的公式(具有相同的結果):

result = np.concatenate([ a[ind[:,i]] for i in range(ind.shape[1]) ], axis=1)


查看完整回答
反對 回復 2023-06-27
?
qq_笑_17

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

您可以使用水平堆疊np.hstack

c = np.array(indexes)
np.hstack((a[c[:,0]],a[c[:,1]]))

輸出:

[[1 2 3 1 2 3]
 [1 2 3 4 5 6]
 [7 8 9 0 0 0]]


查看完整回答
反對 回復 2023-06-27
?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

您可以使用NumPy以下命令在一行中完成此操作:


a = np.arange(12).reshape(4, 3)

print(a)


b = [[0, 0], [1, 1], [2, 3]]

b = np.array(b)

print(b)


c = a[b.reshape(-1)].reshape(-1, a.shape[1]*b.shape[1])

print(c)


'''

[[ 0  1  2]

 [ 3  4  5]

 [ 6  7  8]

 [ 9 10 11]]


[[0 0]

 [1 1]

 [2 3]]


[[ 0  1  2  0  1  2]

 [ 3  4  5  3  4  5]

 [ 6  7  8  9 10 11]]

'''


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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