使用(N-1) 維數組索引N 維數組
使用(N) 存取N 維數組-1) 維數組在尋找沿著特定維度對齊的值時提出了挑戰。使用 np.argmax 的傳統方法可能不夠。
高級索引方法
可以透過使用 np.ogrid 的高級索引來實現優雅的索引。對於 3D 數組 a 及其沿著第一維的 argmax,idx:
import numpy as np a = np.random.random_sample((3, 4, 4)) idx = np.argmax(a, axis=0) m, n = a.shape[1:] I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J]
此方法建立一個網格,可有效地將索引數組擴展到原始數組的完整維度。
任意維度的泛化
對於更泛化的解,可以定義argmax_to_max() 函數:
def argmax_to_max(arr, argmax, axis): new_shape = list(arr.shape) del new_shape[axis] grid = np.ogrid[tuple(map(slice, new_shape))] grid.insert(axis, argmax) return arr[tuple(grid)]
函數採用原始數組及其argmax,和所需的軸並傳回對應的最大值。
通用索引的替代方法
用於使用(N-1) 維索引任何N 維數組數組, all_idx() 函數是一個更簡化的解決方案:
def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)
使用此函數,可以使用idx 沿axis 索引數組a 來完成:
axis = 0 a_max_values = a[all_idx(idx, axis=axis)]
以上是如何使用低維索引數組高效索引 N 維數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!