gpt4 book ai didi

python - 非连续项的 NumPy 数组 View

转载 作者:行者123 更新时间:2023-12-01 06:05:18 29 4
gpt4 key购买 nike

我有一个包含复数的一维 numpy 数组(例如 numpy.complex64)。我需要在此数组上创建 View ,但我不知道如何在给定要包含在 View 中的列表或索引范围的情况下创建 View 。

>>> myArray = np.ndarray(shape=(1000,), dtype=np.complex64)

我知道如何创建连续项目的 View ,例如前 100 个元素:

>>> myView = myArray[:100]

正如我所实验的,不可能在单个项目上创建 View ,例如 myArray[2],因为如果我修改该值,它不会更改底层数组。这没问题,但我希望有一种方法可以从多个任意索引构造 View ,所以像这样的函数会很棒:

>>> myView = createView(myArray, indices=(0, 1, 6, 7, 13))

它将返回一个指向列表(或任何可迭代形式)中给出的索引的 View ,如果我更改 myView,它会像应该的那样更改 myArray。

这可能吗,或者有一个合理的解决方法吗?谢谢

编辑:

解释为什么我需要这个:我想将数组复制到 OpenCL 设备内存(并返回)。我需要设备上元素的顺序与原始数组中的元素顺序不同,并且这些较短的数组将被视为向量,矩阵乘法将在 OpenCL 内核中进行。如果元素没有按照所需的顺序复制到设备内存,则无法进行内存合并,并且性能会显着下降,更不用说 OpenCL 端需要的额外逻辑了。

就我而言,可以使用均匀间隔的 View 来做到这一点,但我想知道是否有更通用的方法。如果可以完成更通用的实现,CPU 端性能的小幅下降是可以接受的。

最佳答案

据我所知,你不能查看任意索引;仅适用于连续索引或规则间隔的索引。这是因为 View 底层内存存储中的元素必须以恒定的字节数分隔,否则所有快速 NumPy 例程将无法工作。

关于python - 非连续项的 NumPy 数组 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285175/

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