2014-03-03 51 views
1

我正在閱讀具有可變數量對象的列表中的圖像文件。Python 2.7:將多個數組的所有元素加在一起

如何將每個文件中的數組添加到對方?

下面是一個例子只增加兩個數組:

imageArray= [sum(x,y) for x,y in zip(io.imread(list[1]),io.imread(list[2]))]  

我想要擴展這是能夠添加可變數量的陣列。

我曾嘗試以下,無果:

for x in filelist: 
    imageArray = [sum(y) for y in itertools.izip(io.imread(x))] 

其產生錯誤: TypeError: Invalid dimensions for image data

任何幫助,將不勝感激!

編輯

我已經能夠使用下面unutbu的部分答案的所有圖像讀入數組:

im = map(SNIO.imread,filelist) 

從這裏,我想對所有產生的陣列加在一起(元素明智)。正確的解決辦法從下面的代碼重現的結果:

imageArray = [x+y+z for x,y,z in zip(im[0],im[1],im[2])] 

,工作正常,但正如原來的問題說,我希望與任何數量的陣列要做到這一點,而不是指定它們在之前例。

回答

1

io.imread是否與scipy.ndimage.io.imread相同? 如果是這樣,那麼添加的數組元素的角度來看,使用np.add.reduce

import numpy as np 
import scipy.ndimage.io as SNIO 
files = ... 
arrs = map(SNIO.imread, files) 
result = np.add.reduce(arrs) 

這將遠遠超過調用Python的sum功能在陣列中的每個位置更快。

+0

'io.imread'是'skimage.io.imread',我認爲它和'scipy.ndimage.io.imread'是一樣的。然而,這個解決方案並沒有像預期的那樣工作。 'map.SNIO.imread,files'是一個好的開始,但'np.add reduce(arrs)'不會產生我想要的結果。我將編輯這個問題來澄清。 – salamander

+1

我相信'np.add.reduce(arrs)'應該產生你正在尋找的結果 - 只要'arrs'中的值不會導致算術溢出。還要注意,如果RGB圖像每個通道具有8位,則每個通道中的值可以在0-255範圍內。總結後,結果可能會輕鬆超過255.所以結果必須重新調整才能被視爲圖像 - 如果這是你正在做的事情...你可以張貼一些示例圖像並解釋你期望的結果嗎? – unutbu

+0

解決了它!正如你所說,我認爲問題在於結果數值超過了255。謝謝! – salamander

相關問題