我有一个包含复数的一维numpy数组(例如。numpy.complex64)。我需要在这个数组上创建视图,但我不知道如何创建一个视图给定一个列表或索引范围,以在视图中包含。非连续项目的NumPy数组视图
>>> myArray = np.ndarray(shape=(1000,), dtype=np.complex64)
我知道如何创建连续项的视图,例如第100个元素:
>>> myView = myArray[:100]
当我尝试,它不可能建立在单一项目视图,像myArray的[2]因为如果我修改了这个值,它不会改变底层数组。这是确定的,但我希望有一种方法来构建由多个任意索引视图,所以这样的功能将是巨大的:
>>> myView = createView(myArray, indices=(0, 1, 6, 7, 13))
这将返回一个指向列表中给出的索引视图(或任何可迭代的形式),如果我更改myView,它会改变myArray像它应该。
这是可能的,还是有一个理智的解决方法? 感谢
编辑:
要解释为什么我需要这样的:我想数组OpenCL设备的内存(反面)复制。我需要设备上元素的顺序不同于原始数组,而这些较短的数组将被视为向量,而矩阵乘法将在OpenCL内核中进行。如果元件没有按要求的顺序复制到设备存储器中,则不可能实现存储器合并,并且会出现显着的性能下降,更不用说在OpenCL端需要额外的逻辑了。
在我的情况下,可以用均匀间隔的视图来做到这一点,但我想知道是否有更一般的方法。如果可以完成更通用的实现,那么CPU性能下降很小。
这不是真的有可能使一个不均匀间隔视图。但是可以以各种方式使用任意索引列表。你需要什么? –
实际上我用完原始数组的所有索引一次,并且想要创建具有较短长度的多个数组,并引用原始数组。 (在我的例子中,可以用均匀间隔的视图来完成,但我想知道是否可以用更一般的方式。)我想将数据复制到OpenCL设备内存,并使用PyOpenCL InOut作为过滤数组,以更改原始数组中的正确索引。 – tamacun