Python numpy数组的别名部分

Python numpy数组的别名部分,python,arrays,numpy,Python,Arrays,Numpy,我使用了很多数组,我想知道是否有一种方法可以使用别名,这样使用数组子集的操作就不需要在每次更新全局数组时“重新切片”数组 例如: values = np.array([100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]) index = np.array([2, 4, 8, 9]) sub_val = values[index] 这将为sub_val返回以下内容: sub_val = [300 500 900 1000] 如果更改原始阵

我使用了很多数组,我想知道是否有一种方法可以使用别名,这样使用数组子集的操作就不需要在每次更新全局数组时“重新切片”数组

例如:

values  = np.array([100, 200, 300, 400, 500, 600, 700, 800, 900, 1000])
index   = np.array([2, 4, 8, 9])
sub_val = values[index]
这将为sub_val返回以下内容:

sub_val = [300 500 900 1000]
如果更改原始阵列:

values += 1
sub_val仍然返回:

sub_val = [300 500 900 1000]
而不是期望的:

sub_val = [301 501 901 1001]
基于此,我假设所有索引/切片操作都在创建浅层副本。有没有办法让sub_val成为数组子集的别名


我们的目标是尽可能高效地做到这一点(子集矩阵用于数千次迭代)。

数组的值存储在数据缓冲区中,但您永远不会直接访问它。数组的索引方法通过使用其
dtype
shape
strips
来解决这个问题

视图
有自己的
形状
跨步
,但共享数据缓冲区(可能从缓冲区中的不同点开始)。因此,它“看到”了对原始文件所做的更改

但是你的“随机”索引不能用
形状和
步幅来表示。因此
numpy
必须制作一个副本-一个具有自己数据缓冲区的数组(从原始数据复制的值)。并且该副本不保留其创建方式的任何记录(即,它不存储索引)

“建议复制”的答案将值从原始值复制回来,但这并不能节省您担心的任何交易成本


我的建议是不要担心这个索引成本。假设
numpy
正在尽可能有效地执行此步骤。相反,集中精力减少那些
数千次迭代

数组的值存储在数据缓冲区中,但您永远不会直接访问它。数组的索引方法通过使用其
dtype
shape
strips
来解决这个问题

视图
有自己的
形状
跨步
,但共享数据缓冲区(可能从缓冲区中的不同点开始)。因此,它“看到”了对原始文件所做的更改

但是你的“随机”索引不能用
形状和
步幅来表示。因此
numpy
必须制作一个副本-一个具有自己数据缓冲区的数组(从原始数据复制的值)。并且该副本不保留其创建方式的任何记录(即,它不存储索引)

“建议复制”的答案将值从原始值复制回来,但这并不能节省您担心的任何交易成本


我的建议是不要担心这个索引成本。假设
numpy
正在尽可能有效地执行此步骤。相反,应该集中精力减少那些
数千次迭代

我想你可以创建自己的slice\u view类来获得这种行为,而不是使用该索引。查看视图v副本和基本v高级索引上的文档。基本切片返回一个视图,应该比高级索引快。当索引值不连续且可能没有标准步骤时,是否可以执行基本切片(格式不一致,开始:停止:间隔)?没有numpy数组的
浅拷贝。它要么是一个视图,要么是一个副本。我想你可以创建自己的slice\u view类来获得这种行为。而不是索引。查看视图v副本和基本v高级索引上的文档。基本切片返回一个视图,应该比高级索引快。当索引值不连续且可能没有标准步骤时,是否可以执行基本切片(格式不一致,开始:停止:间隔)?没有numpy数组的
浅拷贝。它要么是视图,要么是副本。