Ale*_*dro 5 python pointers numpy soft-references
我想知道是否有办法将数据从许多不同的数组引用到一个数组,但没有复制它.
例:
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
Run Code Online (Sandbox Code Playgroud)
但是,在上面的示例中,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]),)
Run Code Online (Sandbox Code Playgroud)
我认为您所要求的根本问题是 numpy 数组必须由连续的内存块支持,该内存块可以定期跨步,以便将内存地址映射到各个数组元素。
在您的示例中,a和b将被分配在不相邻的内存块内,因此无法使用一组步幅来寻址它们的元素。