我正在从具有可变数量对象的列表中读取图像文件。
如何将每个文件中的数组相互添加?
以下是仅添加两个数组的示例:
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])]
工作正常,但是,如原始问题中所述,我希望使用任意数量的数组执行此操作,而不是像前面的示例中那样指定它们。
答案 0 :(得分: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
函数要快得多。