Имам изображение, съхранено като 2d numpy масив (вероятно multi-d).
Мога да направя изглед върху този масив, който отразява 2d плъзгащ се прозорец, но когато го преоформя така, че всеки ред да е сплескан прозорец (редовете са прозорци, колоната е пиксел в този прозорец), Python прави пълно копие. Прави това, защото използвам типичния трик за крачка и новата форма не е съседна в паметта.
Имам нужда от това, защото предавам цели големи изображения на sklearn класификатор, който приема 2d матрици, където няма процедура за пакетно/частично напасване и пълното разширено копие е твърде голямо за памет.
Моят въпрос: Има ли начин да направите това, без да правите пълно копие на изгледа?
Вярвам, че отговорът ще бъде (1) нещо относно крачки или управление на паметта numpy, което съм пренебрегнал, или (2) някакъв вид маскирана структура на паметта за python, която може да емулира масив numpy дори към външен пакет като sklearn, който включва цитон.
Тази задача за обучение върху движещи се прозорци на 2d изображение в паметта е често срещана, но единственият опит, за който знам, за директно отчитане на кръпки, е проектът Vigra (http://ukoethe.github.io/vigra/).
Благодаря за помощта.
>>> A=np.arange(9).reshape(3,3)
>>> print A
[[0 1 2]
[3 4 5]
[6 7 8]]
>>> xstep=1;ystep=1; xsize=2; ysize=2
>>> window_view = np.lib.stride_tricks.as_strided(A, ((A.shape[0] - xsize + 1) / xstep, (A.shape[1] - ysize + 1) / ystep, xsize, ysize),
... (A.strides[0] * xstep, A.strides[1] * ystep, A.strides[0], A.strides[1]))
>>> print window_view
[[[[0 1]
[3 4]]
[[1 2]
[4 5]]]
[[[3 4]
[6 7]]
[[4 5]
[7 8]]]]
>>>
>>> np.may_share_memory(A,window_view)
True
>>> B=window_view.reshape(-1,xsize*ysize)
>>> np.may_share_memory(A,B)
False
as_strided
масив към sklearn класификатор, мисля, че повечето (ако не всички) от класификаторите ще копират вашите данни, ако не са непрекъснати. - person HYRY   schedule 18.07.2014sklearn.feature_extraction.image.extract_patches
ви дава точно изгледа, за който говорите, и преоформянето му определено ще направи копие, според правилата на numpy. Сигурни ли сте, че имате нужда от всички пачове на много изображения наведнъж? Може да искате да разгледате онлайн/групирани алгоритми за каквато и да е целта ви. ОпитайтеSGDClassifier
например. - person eickenberg   schedule 19.07.2014