python - 有什么方法可以使用 Numpy 数组创建软引用或类似指针的对象吗?

标签 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 是一个新的数组,所以如果你修改 ab 的一些元素,它根本没有在 c 中修改。

我希望 c 的每个索引(即 c[0]c[1] 等)都引用每个ab 的元素,但像指针一样,没有对数据进行 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以便将内存地址映射到各个数组元素。

在您的示例中,ab 将分配在不相邻的内存块中,因此无法使用一组大步前进。

关于python - 有什么方法可以使用 Numpy 数组创建软引用或类似指针的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773918/

相关文章:

python - 停止 PostgreSQL 将错误打印到 STDOUT

python - 未知服务错误 botocore

c++ - T* 与 char* 指针算法

c++ - 使用 c while 循环循环所有整数数组元素

c++ - 为什么指针返回时不能自动转换为unique_ptr?

python - 运行多个python的linux bash脚本

python - Matplotlib:如何在绘图左侧添加 1 英寸间隙?

python - 将函数沿轴应用于两个 numpy 数组 - 形状未对齐

python - Pandas:将数据帧的内容合并到单个列中(作为 dict/json 列表)

沿轴的numpy划分