【发布时间】:2026-01-27 10:10:02
【问题描述】:
我有一个关于 numpy 的问题,它是内存。是否可以在不复制多个 numpy 数组的情况下生成视图或其他内容?
import numpy as np
def test_var_args(*inputData):
dataArray = np.array(inputData)
print np.may_share_memory(inputData, dataArray) # prints false, b.c. of no shared memory
test_var_args(np.arange(32),np.arange(32)*2)
我有一个带有图像的 c++ 应用程序,并且想做一些 python 魔术。我使用 c-api 将图像按行传递给 python 脚本,并希望在不复制它们的情况下组合它们。
我能够传递数据 s.t. c++ 和 python 共享相同的内存。现在我想将内存设置为 numpy 视图/数组或类似的东西。
c++ 中的图像不会连续出现在内存中(我对它们进行切片)。我交给 python 的行排列在一个连续的内存块中。
我传递的图像数量各不相同。如果存在预分配技巧,也许我可以改变它。
【问题讨论】:
-
您可以使用
list容器来存储对每个原始数组的引用,而无需创建副本 -
如果我使用列表,我将无法完成我想做的所有 numpy 事情。如果我将列表转换为 numpy 数组,将分配新内存。
-
numpy.array有一个标志copy。它默认设置为True,因此总是复制您的数据。您是否尝试过使用np.array(inputData, copy=False)? -
这已经被问过了。
numpy的数据缓冲区必须是连续的。因此,从其他数组构建数组需要副本。有一个 object dtype,但它只不过是一个列表的 numpy 版本。跨此类数组的数学是有限的。 -
np.ndarray允许您从现有缓冲区创建数组。