首页  >  文章  >  后端开发  >  如何使用 (n-1) 维数组访问多维数组?

如何使用 (n-1) 维数组访问多维数组?

Susan Sarandon
Susan Sarandon原创
2024-10-21 10:05:02754浏览

How to Access Multidimensional Arrays with (n-1)-Dimensional Arrays?

使用 (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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn