这种广播的正确方法是什么?
What is the right approach in this kind of broadcast?
那么,这个广播的正确做法是什么?
我使用了一个 for 循环来验证我的广播输出。
如您所见,它错过了广播第二个元素。
对此有什么想法吗?
from numpy import sum
from imageio import imread
import numpy as np
#https://github.com/glennford49/sampleImages/blob/main/cat1.png
#https://github.com/glennford49/sampleImages/blob/main/cat2.png
img1="cat1.png"
img2="cat2.png"
imageDict={}
img1=imread(img1)
img2=imread(img2)
imageDict["images1"]= (1,img1)
imageDict["images2"]=(2,img2)
listdict= list(map(lambda x:x[1], imageDict.values()))
diff= np.array(np.array(img2-listdict))
result = np.sum(diff,axis=1)/img2.size
result = sum(result)
print("diff per pixel:",(result))
for item in diff: # verifier
res=item / np.array(img2.size)
res = sum(abs(res.reshape(-1)))
print("loop difference:",res)
打印:
diff per pixel: 57.400979382804046
loop difference: 57.40097938280404
loop difference: 0.0
目标:
diff per pixel: 57.400979382804046 , 0.0
loop difference: 57.40097938280404
loop difference: 0.0
首先,np.stack
图像而不是 dict
和 list
。这给你一个 (2, 276, 183, 3) 张量。可通过 (276, 183, 3).
广播
其次,在最后的sum
中你需要避免使用sum
,而是使用np.sum(axis=(1,2))
。这将使 axis=0 不被求和,并为您提供您正在寻找的 2 个差值。
import numpy as np
#Replace with your cat images
img1=np.random.random((276, 183, 3))
img2=np.random.random((276, 183, 3))
imageDict["images1"]= (1,img1)
imageDict["images2"]=(2,img2)
listdict = list(map(lambda x:x[1], imageDict.values()))
diff = img2 - listdict
result = np.sum(diff, axis=1)/img2.size
result = np.sum(result, axis=(1,2))
result
array([0.00016465, 0. ])
那么,这个广播的正确做法是什么? 我使用了一个 for 循环来验证我的广播输出。 如您所见,它错过了广播第二个元素。 对此有什么想法吗?
from numpy import sum
from imageio import imread
import numpy as np
#https://github.com/glennford49/sampleImages/blob/main/cat1.png
#https://github.com/glennford49/sampleImages/blob/main/cat2.png
img1="cat1.png"
img2="cat2.png"
imageDict={}
img1=imread(img1)
img2=imread(img2)
imageDict["images1"]= (1,img1)
imageDict["images2"]=(2,img2)
listdict= list(map(lambda x:x[1], imageDict.values()))
diff= np.array(np.array(img2-listdict))
result = np.sum(diff,axis=1)/img2.size
result = sum(result)
print("diff per pixel:",(result))
for item in diff: # verifier
res=item / np.array(img2.size)
res = sum(abs(res.reshape(-1)))
print("loop difference:",res)
打印:
diff per pixel: 57.400979382804046
loop difference: 57.40097938280404
loop difference: 0.0
目标:
diff per pixel: 57.400979382804046 , 0.0
loop difference: 57.40097938280404
loop difference: 0.0
首先,np.stack
图像而不是 dict
和 list
。这给你一个 (2, 276, 183, 3) 张量。可通过 (276, 183, 3).
其次,在最后的sum
中你需要避免使用sum
,而是使用np.sum(axis=(1,2))
。这将使 axis=0 不被求和,并为您提供您正在寻找的 2 个差值。
import numpy as np
#Replace with your cat images
img1=np.random.random((276, 183, 3))
img2=np.random.random((276, 183, 3))
imageDict["images1"]= (1,img1)
imageDict["images2"]=(2,img2)
listdict = list(map(lambda x:x[1], imageDict.values()))
diff = img2 - listdict
result = np.sum(diff, axis=1)/img2.size
result = np.sum(result, axis=(1,2))
result
array([0.00016465, 0. ])