使用 (n-1) 维数组访问多维数组:综合指南
在多维数组领域,出现了一个诱人的问题挑战:沿特定维度使用 (n-1) 维数组访问 n 维数组。这个难题吸引了众多数据科学家和程序员。
问题:剖析多维数组
设想一个 3 维数组 a,充满分布的数值跨越它的三个轴。现在,假设我们坚定不移地想要沿着给定维度提取最大值,比如第一个维度。我们如何使用 (n-1) 维数组 idx 来实现此目的,该数组保存沿该维度的最大值的索引?
解决方案 1:释放高级索引的力量
利用高级索引的力量,我们可以想出一个解决方案来解决我们的困境。通过利用 numpy 的网格函数,我们可以巧妙地生成跨越 a 的每个维度形状的坐标,除了我们要索引的维度。此操作使我们能够访问 a 的最大值,就像通过 a.max(axis=0) 提取一样。
<code class="python">m, n = a.shape[1:] I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J]</code>
解决方案 2:大众通用方法
对于那些寻求更通用解决方案的人,我们引入了 argmax_to_max。这个巧妙的函数使我们能够毫不费力地从 argmax 和 arr 复制 arr.max(axis) 的行为。其优雅的设计以其复杂的机制简化了索引处理任务。
<code class="python">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)]</code>
索引多维数组:揭开微妙之处
除了提取最大值之外,还可以访问多维数组(n-1) 维数组提出了另一个有趣的挑战。通过将数组形状分解为 (n-1) 维网格,all_idx 有助于无缝检索索引指定的元素值。
<code class="python">def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)</code>
有了这些索引修饰技术,您现在就拥有了在数据整理冒险中克服使用 (n-1) 维数组访问多维数组的挑战。愿它给你带来胜利和启迪!
以上是如何使用 (n-1) 维数组访问多维数组?的详细内容。更多信息请关注PHP中文网其他相关文章!