如果我有N-D 數(shù)組a和一維數(shù)組indexes和,那么將值分配給沿給定軸使用這些索引索引的子數(shù)組的axis最短/最簡單的方法是什么?a如果N和axis在代碼編寫時(shí)已知/固定,那么我可以輕松地做到a[:, :, :, indexes, :, :] = b
^^axis pos^^但是如果N和axis僅在運(yùn)行時(shí)才知道,例如在用戶輸入一些數(shù)據(jù)之后,該怎么辦?我發(fā)現(xiàn)的最簡單的形式是這樣的:a[(slice(None),) * (axis % a.ndim) + (indexes,)] = b但也許有一些內(nèi)置功能?有np.put但它似乎只適用于扁平數(shù)組,不支持多維。還有np.take,它適用于多維情況,但與我需要的相反,它讀取數(shù)據(jù)而不是寫入,盡管具有我正在尋找的寫入語法。你可以這樣做:b = np.take(a, indexes, axis)那么有相反的嗎np.take?就像np.nd_put,可以這樣做:np.nd_put(a, indexes, axis, b)
1 回答

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
一種方法是排列軸,將其置于axis前面并簡單地索引 -
np.moveaxis(a,axis,0)[indexes] = np.moveaxis(b,axis,0)
np.put_along_axis如果您正在尋找圍繞 bultin 構(gòu)建的東西,則另一個(gè)-
i = [None]*b.ndim
i[axis] = Ellipsis
np.put_along_axis(a, indexes[tuple(i)], b, axis=axis)
為了完整起見,這是切片版本 -
i = [slice(None)]*b.ndim
i[axis] = indexes
a[tuple(i)] = b
您可以將其轉(zhuǎn)換為單行代碼以進(jìn)行i列表理解。
添加回答
舉報(bào)
0/150
提交
取消