避免使用列表索引numpy数组时复制

2024-05-14 03:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种简单的方法可以使用列表或任何其他集合来索引数组,这样就不会生成副本(只获取数组的视图)。请不要试图用下面的代码片段来回答这个问题——我用来索引元素的列表并不总是很短(即数千个元素,而不是4个元素),列表是一个算法的产物,因此数字不一定要排序,等等

例如,在下面的代码中,列1、2和3在这两种情况下都被选中,但仅在第一种情况下返回数据视图:

>>> a[:,1:4]
>>> b = a[:,1:4]
>>> b.base is a
True
>>> c = a[:,[1,3,2]]
>>> c.base is a
False

Tags: 方法代码算法视图元素列表base排序
1条回答
网友
1楼 · 发布于 2024-05-14 03:27:07

花式索引(使用索引列表来访问数组的元素)总是会产生一个副本,因为numpy无法将其转换为相同数据的新视图,而是从特定元素开始使用不同的固定步幅和形状。在

实际上,numpy数组是指向数组内存中的第一个元素的指针、数据类型、形状和有关在内存中移动到每个维度(下一行、下一列等)和一些标志的信息。对一些预先存在的内存的视图只是指向该数组中的某个元素,然后调整步幅和形状。花式索引通常指定对预先存在的内存进行随机访问,并且不能强制将数据转换为必需的形式,因此必须进行复制。在

相关问题 更多 >