Корректировка изображений в кадре данных pandas - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь отрегулировать значения изображений в pandas фрейме данных. В каждой строке фрейма данных (изображения) содержится изображение формы (7,7,3), 7x7 пикселей и 3 цветов. Поэтому, когда я пытаюсь настроить верхний левый пиксель первого изображения следующим образом:

Все остальные изображения (строки) также затрагиваются.

print(images.loc[0,'image'][0][0], images.loc[1,'image'][0][0])
images.loc[0,'image'][0][0]=[1,2,3]
print(images.loc[0,'image'][0][0], images.loc[1,'image'][0][0])

[0,0,0] [0,0,0]    
[1,2,3] [1,2,3]

Это происходит только тогда, когда я настраиваю один пиксель. Если я отредактирую изображение полностью, другие изображения / строки не будут затронуты.

images[0,'image']=[image]

работает правильно

добавлено mvce:

import numpy as np
import pandas as pd

images = pd.DataFrame(columns=['image'])
image = np.zeros([2, 2, 2])
images.loc[0, 'image'] = image
images = pd.concat([images] * 2)
images = images.reset_index(drop=True)
print(images.loc[0, 'image'][0][0], '\n')
images.loc[0, 'image'][0][0] = [1, 1]
print(images.loc[0, 'image'][0][0], images.loc[1, 'image'][0][0])

1 Ответ

0 голосов
/ 09 февраля 2020

Проблема в строках

image=np.zeros([2,2,2])

и

images=pd.concat([images]*2)

Вы создаете один numpy объект. На этот объект дважды ссылаются в последнем кадре данных. Чтобы проиллюстрировать, что если вы явно сделаете копию объекта, проблема исчезнет:

import copy
images=pd.DataFrame(columns=['image'])
image=np.zeros([2,2,2])
images.loc[0,'image']=image
images=pd.concat([copy.deepcopy(images), copy.deepcopy(images)]) # explicitly duplicate the object to avoid reference to the same object
images=images.reset_index(drop=True)
print(images.loc[0,'image'][0][0],'\n')
images.loc[0,'image'][0][0]=[1,1]
print(images.loc[0,'image'][0][0],images.loc[1,'image'][0][0])

edit: чтобы указать свой комментарий, как создать много копий, вы можете попробовать:

images = [np.zeros([2,2,2]) for lv in range(10000)] # create list containing independent instances of numpy arrays
images = pd.Series(images, index = range(10000))
images = images.to_frame('images')
images # should now be a dataframe containing independent numpy arrays in its 'image' column.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...