gpt4 book ai didi

python - 在随机矩阵中找到最可能的区域

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

我花了几天时间来解决一个本应很简单的问题...

我有 10 万个 11x11 矩阵。我想知道数据更可能集中在这些矩阵的哪个区域。由于我的数据嘈杂,我使用 3x3 的滑动窗口,并且对于我的 100K 矩阵中的每一个,我保留滑动窗口的坐标以求和更多计数。最后,我可视化了我在矩阵的哪一部分中发现了更多的计数。

这是重现问题的代码示例:

from random import random
from matplotlib import pyplot as plt
import numpy as np

size = 11

positions = np.zeros((size, size))

for _ in range(100000):
matrix = [[random() for _ in range(size)] for _ in range(size)]
max_value = 0
max_coord = 0, 0
for beg in range(1, size - 1):
for end in range(1, size - 1):
suma = sum(matrix[i][j]
for i in range(beg - 1, beg + 2)
for j in range(end - 1, end + 2))
if suma >= max_value:
max_value = suma
max_coord = beg, end
positions[max_coord] += 1

plt.imshow(positions[1:10,1:10], origin='lower')
plt.colorbar()

在示例中,我使用了随机矩阵(我使用了不同类型的随机生成器)和 3x3 的窗口大小(与 2x2、5x5 等结果相同。希望不是 1x1)。

我的问题是,因为我使用随机矩阵作为输入,所以我希望有一个随机的最终矩阵,但我得到了这个:

enter image description here

值的分布是这样的: enter image description here

我知道这看起来像是代码中的一个愚蠢错误,但我真的没有主意了。

编辑

只是为了避免重复分析: 到目前为止我已经尝试过的(上面示例中的粗体):

  • window 尺寸:
    • 1x1(工作)
    • 2x2(不工作 -> 与上面类似)
    • 3x3(不工作 -> 与上面类似)
    • 5x5(不工作 -> 与上面类似)
  • 窗口步骤:
    • 1 -> 重叠(不工作)
    • 2 -> 不重叠(不工作)
  • 随机化

    • 随机.随机
    • 对数正态分布
    • 二项式(n=100,p=0.2 和 p=0.5)

    编辑 2

@jhc 是的,这是一个概率效应,我解决这个问题的方法是使用非重叠窗口。结果示例:

enter image description here

...不是很好但至少是正确的:)

编辑 3

我在 https://math.stackexchange.com 中发布了后续问题为了知道这种偏差是否可以建模:https://math.stackexchange.com/questions/3281256/bias-in-getting-submatrix-of-higher-sum-in-random-matrices

最佳答案

这是一个概率效应。您的结果在角落的 3x3 子矩阵中具有更高的值与单个单元格的采样率负相关。

您可以将其视为单个单元格将其值传播到其周围的 3x3 子矩阵的概率。拐角处的非常高(或低)的值(例如 [0,0])将仅影响 [1,1] 处表示的 3x3 子矩阵。内部部分的值有助于形成更多的 3x3 子矩阵。通过足够的重复,这种效果会产生观察到的梯度,它不仅存在于最大值,也存在于最小值。

检查这段计算每个单元格采样率的代码:

from random import random
from matplotlib import pyplot as plt
import numpy as np
size = 11

positions = np.zeros((size, size))
visits = np.zeros((size, size))

for i in range(1000):
matrix = [[random() for j in range(size)] for i in range(size)]
max_value = 0
max_coord = 0, 0
for beg in range(1, size - 1):
for end in range(1, size - 1):
suma = 0
for i in range(beg - 1, beg + 2):
for j in range(end - 1, end + 2):
suma += matrix[i][j]
visits[i,j] += 1
if suma > max_value:
max_value = suma
max_coord = beg, end
positions[max_coord] += 1

#plt.imshow(positions, origin='lower')
plt.imshow(visits, origin='lower')
plt.colorbar()
plt.show()

cellvisits

关于python - 在随机矩阵中找到最可能的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839378/

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