我想知道是否有一种方法可以将来自许多不同数组的数据引用到一个数组中,而不需要复制它。
例子:
import numpy as np
a = np.array([2,3,4,5,6])
b = np.array([5,6,7,8])
c = np.ndarray([len(a)+len(b)])
offset = 0
c[offset:offset+len(a)] = a
offset += len(a)
c[offset:offset+len(b)] = b
但是,在上面的例子中,c
是一个新的数组,所以如果你修改 a
或 b
的一些元素,它根本没有在 c
中修改。
我希望 c
的每个索引(即 c[0]
、c[1]
等)都引用每个a
和 b
的元素,但像指针一样,没有对数据进行 deepcopy
。
最佳答案
正如@Jaime 所说,您不能生成一个新数组,其内容指向多个现有数组中的元素,但您可以做相反的事情:
import numpy as np
c = np.arange(2, 9)
a = c[:5]
b = c[3:]
print(a, b, c)
# (array([2, 3, 4, 5, 6]), array([5, 6, 7, 8]), array([2, 3, 4, 5, 6, 7, 8]))
b[0] = -1
print(c,)
# (array([ 2, 3, 4, -1, 6, 7, 8]),)
我认为您所要求的根本问题是 numpy 数组必须由一个连续的内存块支持,该内存块可以是 regularly strided以便将内存地址映射到各个数组元素。
在您的示例中,a
和 b
将分配在不相邻的内存块中,因此无法使用一组大步前进。
关于python - 有什么方法可以使用 Numpy 数组创建软引用或类似指针的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773918/