如何解决迭代所有组合
我正在执行一个操作,我对两个图像进行平均,一个图像是固定的,第二个图像是我迭代的,我如何对所有组合执行相同的操作?喜欢
mean(img1,img1),mean(img1,img2),img3) ... mean(img2,mean(img2,img3) ... mean(img3,mean(img3,img2)mean(img3,img3)
k=[]
for i in range(image.shape[-1]):
k = (np.mean(image[:,:,102],img[:,i]))
result.append(k)
谢谢!
解决方法
您可以按如下顺序进行:
import numpy as np
from itertools import combinations
n_images = 4
imsz = 2
images = np.random.normal(size=(n_images,imsz,imsz))
image_combinations = combinations(range(images.shape[0]),2)
means = []
for combo in image_combinations:
#print(combo)
means.append( (images[combo[0],:,:] + images[combo[1],:]) /2)
means = np.array(means)
means.shape
现在,根据图像的数量和大小,开销可能相对较大,但我找不到真正矢量化操作的方法(这将是一个重大改进)。事实上,你可以做一些事情,比如你做所有组合(包括它本身和双向(1,2),(2,1))然后,你去这个矩阵中获取那些你想要。
all_means = (images[:,np.newaxis,:] + images[np.newaxis,:]) /2
image_combinations = combinations(range(images.shape[0]),2)
relevant_means = []
for combo in image_combinations:
relevant_means.append(all_means[combo[0],combo[1],:])
relevant_means = np.array(relevant_means)
对于 10 个 2x2 图像,第二种解决方案的时钟速度似乎快了 2 倍以上。但是,内存占用也增加了 2 倍多,所以没有免费餐。
我希望这会有所帮助。
,这里有一种方法可以从数组 'image' 中每两个图像的所有组合中获取均值。其中'means'的切片[:,i,j]
是图像i和图像j的平均值。
import numpy as np
image = np.random.randint(0,5,(2,2,3))
means = (image[:,None,:] + image[:,None])/2
输出:
image =
[[[3 1 3]
[3 4 4]]
[[2 2 1]
[0 3 0]]]
means =
[[[[3. 2. 3. ]
[2. 1. 2. ]
[3. 2. 3. ]]
[[3. 3.5 3.5]
[3.5 4. 4. ]
[3.5 4. 4. ]]]
[[[2. 2. 1.5]
[2. 2. 1.5]
[1.5 1.5 1. ]]
[[0. 1.5 0. ]
[1.5 3. 1.5]
[0. 1.5 0. ]]]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。