阵列的Numpy矩阵没有复制可能吗?

时间:2015-08-26 08:47:02

标签: python c++ arrays numpy

我有一个关于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的行是在连续的内存块中安排的。

我传递的图像数量各不相同。如果存在预分配技巧,也许我可以改变它。

1 个答案:

答案 0 :(得分:0)

这里的答案中有一个有用的讨论:Can memmap pandas series. What about a dataframe?

简而言之:

  • 如果从单个矩阵数组初始化DataFrame,则可能无法复制数据。
  • 如果从相同或不同类型的多个阵列初始化,则会复制您的数据。

这是Pandas'使用的默认BlockManager所允许的唯一行为。 DataFrame,内部组织DataFrame的内存。

虽然可以monkey patch the BlockManager更改此行为,但在这种情况下,您的提供数据将被引用。