Python 有没有办法使用Numpy数组创建软引用或类似指针的对象?

Python 有没有办法使用Numpy数组创建软引用或类似指针的对象?,python,numpy,pointers,soft-references,Python,Numpy,Pointers,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 但是,在上面的示例中,c是一个新数组,

我想知道是否有一种方法可以将来自多个不同数组的数据引用到一个数组,但不复制它

例如:

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数组必须由一个连续的内存块来支持,以便将内存地址映射到单个数组元素


在您的示例中,
a
b
将分配在非相邻的内存块中,因此无法使用一组跨步来寻址它们的元素。

没有办法。。。您可以用另一种方法来实现,即从先前定义的
c
生成切片
a
b
,因此通过一些先前的计划,您可能会得到您想要的。但事实并非如此。这确实令人感兴趣,但我有
a
b
“根据我问题的自我定义”。谢谢你的回答,但在我看来,必须有一种方法来定义指针数组。了解如何在Python中定义指针应该非常有用。有没有办法做到这一点?这取决于你所说的“指针数组”的确切含义。正如我已经解释过的,numpy数组的内部内存布局意味着您绝对不能创建一个引用两个分别分配的现有数组中的值的新numpy数组。我想这可能是一个-你到底想要一个“指针数组”做什么?对于指针数组,我指的是一个数组,每个元素指向另一个内存地址。但我认为你是对的,这是不可能的。无论如何,你的例子确实很有趣。谢谢我的问题是你为什么想要这样一个数组。我知道你还是接受了我的回答,但是如果你想问一个单独的后续问题,那么我强烈建议你更全面地解释你问题的背景——用numpy可能有一个很好的解决方法,但我们需要知道你的实际问题是什么,而不仅仅是你想到的特定解决方案。