gpt4 book ai didi

python - 通过取相邻元素的平均值替换 numpy 矩阵中的元素

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:57 25 4
gpt4 key购买 nike

我正在尝试用相关单元附近的矩阵单元值的平均值(即值低于阈值的单元)替换 numpy 矩阵中低于某个阈值的值。

例如,让我们考虑这个 10*10 矩阵(例如 matrx):

matrx = np.array([[1,4,9,2,2,5,1,1,9,1],[2,4,3,5,2,2,1,2,1,1],
[3,4,-2,-3,4,2,3,5,1,2],[2,3,-3,-5,3,3,7,8,-4,1],[3,4,2,3,4,2,3,7,3,2],
[1,4,9,3,4,3,3,2,9,4],[2,1,3,5,2,2,3,2,3,3],
[3,6,8,3,7,2,3,5,3,2],[5,-2,-3,5,2,3,7,8,4,3],[4,-2,-3,1,1,2,3,7,3,5]])

print matrx
[[ 1 4 9 2 2 5 1 1 9 1]
[ 2 4 3 5 2 2 1 2 1 1]
[ 3 4 -2 -3 4 2 3 5 1 2]
[ 2 3 -3 -5 3 3 7 8 -4 1]
[ 3 4 2 3 4 2 3 7 3 2]
[ 1 4 9 3 4 3 3 2 9 4]
[ 2 1 3 5 2 2 3 2 3 3]
[ 3 6 8 3 7 2 3 5 3 2]
[ 5 -2 -3 5 2 3 7 8 4 3]
[ 4 -2 -3 1 1 2 3 7 3 5]]

并且,我们假设阈值为零。目前,我正在使用以下方法找到值低于零的单元格的 (2d) 位置:

threshold = 0
mark_x = np.where( matrx<0 )[0]
mark_y = np.where( matrx<0 )[1]

下面是上述矩阵的图片。 enter image description here

在我的工作中,值低于阈值的单元格大多出现在 block 中(如矩阵中所示)。目前,我正在用矩阵的平均值 (matrx) 替换所有值低于阈值的单元格。

但是,我想做得更好,将低于阈值的元素的值替换为与相关单元相邻的良好相邻元素的平均值。此处,“良好”相邻单元格 将是那些值高于阈值 的相邻单元格。对于低于阈值的单元格周围的相邻单元格大小的选择,我有点灵活(对于低于阈值的每个单元格,相邻单元格的大小将相同。)

下图给出了我想要实现的目标的图形化想法。在下面给出的图片中,值低于阈值的每个 Blob 周围的红色边界代表最近的邻居。在每个有界框内,带有红色刻度线的单元格是我们在替换值低于阈值的单元格的值时要考虑的平均值。 enter image description here

当我们发现值低于阈值的单元格时,我们期望看到大小不等的 Blob ;还有 靠近边界 的 Blob 。

在 Python 中,实现这个预期目标的最佳方法是什么?我将非常感谢任何答案。

最佳答案

这可能有效,但是,您可能更愿意保留原始矩阵并更改副本以使其更精确:

for x, y in zip(mark_x, mark_y) :
slice = matrx[max(0, x-2):x+2, max(0,y-2):y+2] # assuming you want 5x5 square
matrx[x,y] = np.mean([i for i in slice.flatten() if i > 0]) # threshold is 0

给出结果:

array([[1, 4, 9, 2, 2, 5, 1, 1, 9, 1],
[2, 4, 3, 5, 2, 2, 1, 2, 1, 1],
[3, 4, 3, 3, 4, 2, 3, 5, 1, 2],
[2, 3, 3, 3, 3, 3, 7, 8, 3, 1],
[3, 4, 2, 3, 4, 2, 3, 7, 3, 2],
[1, 4, 9, 3, 4, 3, 3, 2, 9, 4],
[2, 1, 3, 5, 2, 2, 3, 2, 3, 3],
[3, 6, 8, 3, 7, 2, 3, 5, 3, 2],
[5, 4, 3, 5, 2, 3, 7, 8, 4, 3],
[4, 4, 4, 1, 1, 2, 3, 7, 3, 5]])

关于python - 通过取相邻元素的平均值替换 numpy 矩阵中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51462787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com