将海量矩阵拆分为块

Posted

技术标签:

【中文标题】将海量矩阵拆分为块【英文标题】:Splitting a massive matrix into blocks 【发布时间】:2012-04-19 15:54:28 【问题描述】:

我有问题。我正在做一个任务,试图在另一个矩阵(向量)中找到一个矩阵(向量),矩阵的大小是:

海量矩阵:1024x768 小矩阵:36x49

基本上,我的理论是将大矩阵分割成与小矩阵大小相同的块,这意味着我能够看到小矩阵是否存在于哪个块中,然后输出该块。但是,它不会平均分割,但我需要一种方法来确定小矩阵是否确实存在于大矩阵中。

作为一个例子,我将使用测试数据:

M1 = 
    0 1 0 0 
    1 1 1 1
    0 0 0 0
    1 0 1 1

M2 = 

    0 1
    1 1

然后我会将矩阵拆分为 2x2 的块,然后以这种方式检查。这很简单,因为我只使用一个小矩阵,并且矩阵可以平均分割,而上面的问题要理解和弄清楚要复杂得多。

本质上,我需要能够将 (1024x768) 拆分为 (36x49) 的块大小,以便进行检查以确定该特定矩阵的位置。我一直在使用这个算法:

// Assume: 
// matrix1ColSize = 768
// matrix2ColSize = 49
const int ROW_BOUNDS = matrix1.size() - matrix2.size();
const int COL_BOUNDS = matrix1ColSize - matrix2ColSize;

bool found = false;

for(int i=0; (i < ROW_BOUNDS); i++)

    bool matchFound = false;

    for(int j=0; (j < COL_BOUNDS); j++) 
        // logic here
    
    cout << endl;

有人可以提供任何建议吗?这真的让我很烦:(!

【问题讨论】:

好像和你的previous question有关,有区别吗?如果有,您应该强调它是什么,并将问题链接为相关。如果是同一个问题.. 好吧 - 你不应该两次问同一个问题。 不是在比较矩阵,这实际上是在拆分它们。基本上,我可以比较它们,但是它们没有正确拆分。 我没有指责你任​​何事情,只是表明你应该参考你的旧问题。如果他们有更多的背景知识,回答者更有可能了解您真正想要达到的目标,并且因此您会得到更好的答案! 嘿,谢谢,很抱歉,如果最后一条评论是以这种方式出现的 - 这不是故意的 :) 只是这个问题现在真的让我很恼火,哈哈 - 我从没想过会这么复杂。跨度> 你看过我的answer to your previous question吗? 【参考方案1】:

如果两个矩阵的所有元素都相同,则它们是相同的。所以下面的伪代码将小矩阵与大矩阵中的一个块进行比较:

Initialize result to "true"
For each position in the small matrix
    Read the value from the large matrix; call it x1
    Read the value from the small matrix; call it x2
    If x1 is not equal to x2, set result to "false"
    (Optional) If x1 is not equal to x2, stop looking at other positions
Here, use the result

这个逻辑将在您的 2 个嵌套循环内,因此您将有 4 个嵌套循环!如果您害怕混淆,请将实现放在函数中。如果你想使用 4 个嵌套循环,祝你好运。

在 C++ 中:

bool is_equal = true;
for (int y = 0; y < 49; ++y)

    for (int x = 0; x < 36; ++x)
    
        if (matrix1.at(j + x, i + y) != matrix2.at(x, y))
        
            is_equal = false;
            goto DONE; // optional
        
    

DONE:;

编辑:此代码假定使用矩阵的自定义类;再次查看您的代码后,我意识到您可能使用了向量向量 (std::vector&lt;std::vector&lt;int&gt;&gt;),因此请使用 matrix2[y][x] 而不是 matrix2.at(x, y)

【讨论】:

嘿,谢谢您的回复.. 好吧,我很困惑,哈哈,这将通过 matrix2(因为 i,j 将遍历它们)但是,我将如何通过庞大的矩阵?这是x,y进来的地方吗?因为,如果我这样做,它基本上会说:是 m1[0] = m12[0] - 是/否,但仅在某个点(49x36),似乎海量矩阵还没有被分割成块?我对两个矩阵都使用一维向量。谢谢:) @user1326876 您的代码会通过海量矩阵 (matrix1)。您的代码中有注释“这里的逻辑”;只需输入我的代码而不是该评论;它应该可以工作。

以上是关于将海量矩阵拆分为块的主要内容,如果未能解决你的问题,请参考以下文章

将 jsonarray 拆分为块数组到另一个数组中

将 QList 拆分为块、指针或引用?

将AVAsset视频文件拆分为块

如何将数组拆分为块,但让它一个接一个地填充每个数组

如何在 Rust 中将字符串拆分为块以插入空格

将压缩的csv拆分为块的最有效方法