有没有一种简单的方法可以使用列表或任何其他集合来索引数组,这样就不会生成副本(只获取数组的视图)。请不要试图用下面的代码片段来回答这个问题——我用来索引元素的列表并不总是很短(即数千个元素,而不是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:
花式索引(使用索引列表来访问数组的元素)总是会产生一个副本,因为numpy无法将其转换为相同数据的新视图,而是从特定元素开始使用不同的固定步幅和形状。在
实际上,numpy数组是指向数组内存中的第一个元素的指针、数据类型、形状和有关在内存中移动到每个维度(下一行、下一列等)和一些标志的信息。对一些预先存在的内存的视图只是指向该数组中的某个元素,然后调整步幅和形状。花式索引通常指定对预先存在的内存进行随机访问,并且不能强制将数据转换为必需的形式,因此必须进行复制。在
相关问题 更多 >
编程相关推荐