gpt4 book ai didi

python - np.unravel_index 的直观解释是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:35:43 25 4
gpt4 key购买 nike

和标题说的差不多。我已经阅读了文档并且我已经使用了一段时间的功能,但我无法辨别这种转换的物理表现是什么。

最佳答案

计算机内存是线性寻址的。每个存储单元对应一个数字。可以根据基址(即其第一个元素的内存地址)和项目索引来寻址内存块。例如,假设基地址为 10,000:

item index      0       1       2       3
memory address 10,000 10,001 10,002 10,003

要存储多维 block ,它们的几何形状必须以某种方式适应线性内存。在 CNumPy 中,这是逐行完成的。一个 2D 示例是:

  | 0      1      2      3
--+------------------------
0 | 0 1 2 3
1 | 4 5 6 7
2 | 8 9 10 11

因此,例如,在这个 3×4 block 中,二维索引 (1, 2) 将对应于线性索引 6,即 1 x 4 + 2.

unravel_index 则相反。给定一个线性索引,它计算相应的 ND 索引。由于这取决于 block 尺寸,因此也必须通过这些尺寸。因此,在我们的示例中,我们可以从线性索引 6 中获取原始二维索引 (1, 2):

>>> np.unravel_index(6, (3, 4))
(1, 2)

注意:以上内容掩盖了一些细节。 1)将项目索引转换为内存地址还必须考虑项目大小。例如,一个整数通常有 4 或 8 个字节。因此,在后一种情况下,项目 i 的内存地址将是 base + 8 x i。 2)。 NumPy 比建议的要灵活一些。如果需要,它可以逐列组织 ND 数据。它甚至可以处理内存中不连续但例如留下间隙等的数据。


额外阅读:internal memory layout of an ndarray

关于python - np.unravel_index 的直观解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com