2015-08-26 3 views
3

У меня вопрос о 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 и хочу объединить их, не копируя их.

Я могу передать данные s.t. C++ и python используют одну и ту же память. Теперь я хочу изменить память на numpy view/array или что-то в этом роде.

Изображения в C++ не постоянно присутствуют в памяти (я нарезаю их). Строки, которые я передаю на python, группируются в непрерывном блоке памяти.

Количество изображений, которые я пропускаю, варьируется. Возможно, я могу изменить это, если существует преалокационный трюк.

+0

Вы можете использовать контейнер 'list' для хранения ссылки на каждый исходный массив без создания копии –

+1

Если бы я использовал список, я не смог бы выполнить все нумерованные вещи, которые я хочу сделать. И если я конвертирую список в массив numpy, будет выделена новая память. – Lks

+1

'numpy.array' имеет флаг' copy'. Он настроен на «Истинный» по умолчанию, поэтому всегда копирует ваши данные. Вы пытались использовать 'np.array (inputData, copy = False)'? – Dux

ответ

0

Там полезная дискуссия в ответ здесь: Can memmap pandas series. What about a dataframe?

Короче:

  • Если инициализировать DataFrame из одного массива матрицы, то она не может копировать данные.
  • Если вы инициализируетесь из нескольких массивов того же или разных типов, ваши данные будут скопированы.

Это единственное поведение, разрешенное блочным администратором по умолчанию, используемым Pandas DataFrame, который организует внутреннюю память DataFrame.

Возможно его изменение до monkey patch the BlockManager, чтобы изменить эту ситуацию, и в этом случае будут предоставлены ссылки на предоставленные вами данные.

Смежные вопросы