标签: submatrix

选择满足条件的矩阵行

在R中有一个矩阵:

     one two three four
 [1,]   1   6    11   16
 [2,]   2   7    12   17
 [3,]   3   8    11   18
 [4,]   4   9    11   19
 [5,]   5  10    15   20
Run Code Online (Sandbox Code Playgroud)

我想提取其行有第三列= 11的子矩阵.这是:

      one two three four
 [1,]   1   6    11   16
 [3,]   3   8    11   18
 [4,]   4   9    11   19
Run Code Online (Sandbox Code Playgroud)

我想在没有循环的情况下这样做.我是R的新手,所以这可能非常明显,但文档往往有些简洁.

select r matrix submatrix

128
推荐指数
5
解决办法
37万
查看次数

获得最大总和的子矩阵?

输入:二维数组NxN - 矩阵 - 具有正负元素.

输出:任何大小的子矩阵,使得其总和是所有可能子矩阵中的最大值.

要求:算法复杂度为O(N ^ 3)

历史:在Algorithmist,Larry和Kadane算法的修改的帮助下,我设法解决了部分问题,即仅在Java中确定求和.
感谢Ernesto设法解决问题的其余部分,即确定矩阵的边界,即左上角,右下角 - 在Ruby下面.

algorithm max dynamic-programming submatrix

63
推荐指数
4
解决办法
6万
查看次数

使用Eigen的子矩阵和指数

我正在研究一个MATLAB项目,我想用C++和Eigen重新实现计算量最大的部分.我想知道是否有办法执行以下操作(MATLAB语法):

B = A(A < 3);
Run Code Online (Sandbox Code Playgroud)

对于那些不熟悉MATLAB的人,上述命令初始化由A中单元格构成的矩阵B,其值小于3.

我从Eigen论坛的帖子中看到,可以通过以下方式获得感兴趣的指数:

MatrixXi indices = (A.array() < 3).cast<int>();
Run Code Online (Sandbox Code Playgroud)

我想拥有的是:

MatrixXd B = A(A.array() < 3);
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ vectorization submatrix eigen

14
推荐指数
3
解决办法
9701
查看次数

切片稀疏(scipy)矩阵

感谢任何帮助,以便在从scipy.sparse包中切割lil_matrix(A)时理解以下行为.

实际上,我想基于行和列的任意索引列表提取子矩阵.

当我使用这两行代码时:

x1 = A[list 1,:]
x2 = x1[:,list 2]
Run Code Online (Sandbox Code Playgroud)

一切都很好,我可以提取正确的子矩阵.

当我尝试在一行中执行此操作时,它失败了(返回的矩阵为空)

x=A[list 1,list 2]
Run Code Online (Sandbox Code Playgroud)

为什么会这样?总的来说,我在matlab中使用了类似的命令,并在那里工作.那么,为什么不使用第一个,因为它有效?这似乎非常耗时.由于我必须经历大量的条目,我想使用单个命令加速它.也许我使用错误的稀疏矩阵类型......任何想法?

python scipy sparse-matrix slice submatrix

11
推荐指数
2
解决办法
9060
查看次数

MATLAB:使用逻辑索引提取子矩阵

我正在为MATLAB中这个非常简单的问题寻找一个优雅的解决方案.假设我有一个矩阵

>> M = magic(5)

M =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9 
Run Code Online (Sandbox Code Playgroud)

和形式的逻辑变量

I =

     0     0     0     0     0
     0     1     1     0     0
     0     1     1     0     0
     0     0     0     0     0
     0     0     0     0     0
Run Code Online (Sandbox Code Playgroud)

如果我尝试检索与值M相关联的元素,我会得到一个列向量1I

>> M(I)

ans =

     5
     6
     7
    13
Run Code Online (Sandbox Code Playgroud)

[5 7 ; 6 13]从这个逻辑索引中获取矩阵的最简单方法是什么?

如果我知道非零元素的形状 …

indexing matlab matrix addressing submatrix

8
推荐指数
1
解决办法
1万
查看次数

找到最大的子矩阵算法

我有一个N*N矩阵(N = 2到10000)的数字,范围从0到1000.如何找到由相同数字组成的最大(矩形)子矩阵?

例:

     1  2  3  4  5
    -- -- -- -- --
1 | 10  9  9  9 80
2 |  5  9  9  9 10
3 | 85 86 54 45 45
4 | 15 21  5  1  0
5 |  5  6 88 11 10
Run Code Online (Sandbox Code Playgroud)

输出应该是子矩阵的区域,后面是其左上角元素的基于1的坐标.例如,这是(6, 2, 1)因为有6个9位于第2列第1行.

algorithm submatrix

6
推荐指数
1
解决办法
3592
查看次数

获取所有子矩阵

我有一个N×M矩阵,m如:

 1  2  3  4
 5  6  7  8
 9 10 11 12
13 14 15 16
Run Code Online (Sandbox Code Playgroud)

我希望使用for循环得到大小为P×Q(P,Q为奇数)的所有子矩阵.

结果s应该是P×Q×((N-P + 1)·(M-Q + 1))矩阵.

例如,如果P = Q = 3:

s(:,:,1) = [1 2 3;  5  6  7;  9 10 11]
s(:,:,2) = [2 3 4;  6  7  8; 10 11 12]
s(:,:,3) = [5 6 7;  9 10 11; 13 14 15]
s(:,:,4) = [6 7 8; 10 11 12; 14 15 16]
Run Code Online (Sandbox Code Playgroud)

matlab vectorization submatrix

6
推荐指数
1
解决办法
1142
查看次数

如何在犰狳中加入矩阵

我有几个进程,每个进程都计算自己的矩阵。最后,我希望他们将他们求解的矩阵发送到根进程,根进程实际上将它们连接到一个大矩阵中,然后简单地以 ASCII 格式将其输出到文本文件中。是否有可能以某种优雅的方式进行,或者我是否必须遍历每个矩阵并自己“加入”它?


例子:

matrix 0:
0 5 
4 5 

matrix 1:
1 2
3 4

matrix 2:
5 6
8 7

matrix 3:
0 0
2 1

Final "joined" matrix:
0 5 | 1 2
4 5 | 3 4
----+----
5 6 | 0 0
8 7 | 2 1
Run Code Online (Sandbox Code Playgroud)

matrix armadillo submatrix

6
推荐指数
1
解决办法
3067
查看次数

Matlab:找到元素到矩阵边界的距离

在Matlab中说我有一个像这样的矩阵:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

我现在需要在每个元素周围找到子矩阵3x3(因此每个元素依次是3x3子矩阵的中心).在中间,找到fx是没有问题的

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 …

matlab matrix submatrix

5
推荐指数
1
解决办法
961
查看次数

八度:矩阵中的多个子矩阵

我有一个大矩阵,我想从中收集一组子矩阵.如果我的矩阵是NxN并且子矩阵大小是MxM,我想收集I=(N - M + 1)^2子矩阵.换句话说,我希望原始矩阵中的每个元素都有一个MxM子矩阵,它可以位于这种矩阵的左上角.

这是我的代码:

for y = 1:I
    for x = 1:I
        index = (y - 1) * I + x;
        block_set(index) = big_mat(x:x+M-1, y:y+M-1)
    endfor
 endfor
Run Code Online (Sandbox Code Playgroud)

输出如果a)错误,并且b)暗示big_mat(x:x+M-1, y:y+M-1)表达式中的某些东西可以得到我想要的东西,而不需要两个for循环.任何帮助将非常感激

matlab wolfram-mathematica matrix octave submatrix

4
推荐指数
1
解决办法
3009
查看次数