numpy 如何计算相同形状的射线?

gz5pxeao  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(109)

在计算0-1图像2d-熵时,我需要得到相邻灰度概率分布:

img=np.random.randint(0,2,(64,64))

avg=avgpool2d(img,kernel_size=3,padding=1).numpy() * 9

avg = avg.astype(np.int32)

distribution=np.zeros((2,9))

for i,j in zip(img.flat,avg.flat):

    distribution[i,j]+=1

我想避免使用numpy的方式循环,但花哨的索引似乎在这里不起作用:

a=np.zeros((3,))

b=np.array([1,0,0])

a[b]+=1 # a=[1,1,0] not [2,1,0]

所以

img=np.random.randint(0,2,(64,64))

avg=avgpool2d(img,kernel_size=3,padding=1).numpy() * 9

avg = avg.astype(np.int32)

distribution=np.zeros((2,9))

distribution[img,avg]+=1

给出错误结果
有没有一种优雅的方法可以在两个(或更多)数组之间计数?

o2g1uqev

o2g1uqev1#

使用numpy.unique

a=np.zeros((3,))
b=np.array([1,0,0])

idx, cnt = np.unique(b, return_counts=True)
a[idx] += cnt

numpy.add.at(就位):

np.add.at(a, b, 1)

输出:

array([2., 1., 0.])

相关问题