假設(shè)我有一個(gè)包含大量行的二維數(shù)組,以及該數(shù)組的索引對(duì)列表。我想創(chuàng)建一個(gè)新的 2 維數(shù)組,其行是原始數(shù)組的行的串聯(lián),根據(jù)索引對(duì)列表制作。例如:a = 1 2 34 5 67 8 90 0 0indexes = [[0,0], [0,1], [2,3]]返回的數(shù)組應(yīng)該是:1 2 3 1 2 31 2 3 4 5 67 8 9 0 0 0顯然我可以迭代索引列表,但我的問題是是否有更有效的方法來做到這一點(diǎn)。我應(yīng)該說索引列表也非常大。
3 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先將索引轉(zhuǎn)換為Numpy數(shù)組:
ind = np.array(indexes)
然后生成結(jié)果為:
result = np.concatenate([a[ind[:,0]], a[ind[:,1]]], axis=1)
結(jié)果是:
array([[1, 2, 3, 1, 2, 3], [1, 2, 3, 4, 5, 6], [7, 8, 9, 0, 0, 0]])
另一個(gè)可能的公式(具有相同的結(jié)果):
result = np.concatenate([ a[ind[:,i]] for i in range(ind.shape[1]) ], axis=1)

qq_笑_17
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用水平堆疊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]]

冉冉說
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
您可以使用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]]
'''
添加回答
舉報(bào)
0/150
提交
取消