python - 将矩阵分割成更小的 block 并根据其值执行某些操作

标签 python numpy matrix numpy-ndarray mask

我有一个 numpy 数组ys_big_seg,其形状如下:(146, 128, 128)。它包含像素掩码,其值可以是0或1。如果像素属于给定类别,则为 1,否则为 0。我必须将其缩放为二进制掩码。所以我想迭代 (128, 128) 矩阵并将其拆分为 (8, 8) 矩阵,然后基于较小的矩阵值(如果每个元素都是 0 那么 0,如果每个元素都是 1 那么 1,如果有是混合值,然后随机为 0 或 1)用给定值替换这些较小的矩阵,将 (128, 128) 矩阵简化为 (16, 16)

如何解决这个问题? 我希望这是有道理的,对不起我的英语。

最佳答案

我认为这符合您的要求:

>>> x.shape
(146, 128, 128)

>>> mask = x.reshape(-1, 16, 16, 8, 8).sum(axis=(3, 4)) >= 32

>>> mask.shape
(146, 16, 16)

如果总和 >= 32(即一半或更多值是 1),任何混合有 0 和 1 的 8x8 block 都会得到 1,所以它不完全是 1 > 随机选择。

显然,总和为 0(8x8 block 中的所有元素均为 0)将“失败”该标准并为 0,总和为 64(8x8 block 中的所有元素均为 1)将“通过”并结束设为 1。如果您的矩阵更加稀疏,您可以将阈值从 32 降低。

由于您使用此数组作为掩码,因此您可以将 1 和 0 保留为其 bool 对应项。但如果您打算将掩码用作二进制数组,那么您可以轻松添加 .astype(int)

关于python - 将矩阵分割成更小的 block 并根据其值执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72764515/

相关文章:

python - IPython 自动重新加载子目录中的更改

python - 将 Facebook Ads Insights 结果导入 pandas 数据框

python - 将两个 numpy 数组相乘时出错

python - 如何在 Python 中集成 beta 发行版

c++ - cv::Mat::t () 和 cv::transpose() 之间的区别

c++ - OpenCV图像阵列,4D矩阵

python - Bokeh 小部件回调以选择所有复选框

Python:在 .csv 文件中写入时删除特定字符

python - Google 应用程序引擎 - Django - numpy pandas blaze

java - 如何对 nxn 矩阵(最多 n=2^i)测试 1000 组数据,每组数据 20 次?