在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的新手,所以这可能非常明显,但文档往往有些简洁.
输入:二维数组NxN - 矩阵 - 具有正负元素.
输出:任何大小的子矩阵,使得其总和是所有可能子矩阵中的最大值.
要求:算法复杂度为O(N ^ 3)
历史:在Algorithmist,Larry和Kadane算法的修改的帮助下,我设法解决了部分问题,即仅在Java中确定求和.
感谢Ernesto设法解决问题的其余部分,即确定矩阵的边界,即左上角,右下角 - 在Ruby下面.
我正在研究一个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)
谢谢.
感谢任何帮助,以便在从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中使用了类似的命令,并在那里工作.那么,为什么不使用第一个,因为它有效?这似乎非常耗时.由于我必须经历大量的条目,我想使用单个命令加速它.也许我使用错误的稀疏矩阵类型......任何想法?
我正在为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
相关联的元素,我会得到一个列向量1
I
>> M(I)
ans =
5
6
7
13
Run Code Online (Sandbox Code Playgroud)
[5 7 ; 6 13]
从这个逻辑索引中获取矩阵的最简单方法是什么?
如果我知道非零元素的形状 …
我有一个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行.
我有一个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) 我有几个进程,每个进程都计算自己的矩阵。最后,我希望他们将他们求解的矩阵发送到根进程,根进程实际上将它们连接到一个大矩阵中,然后简单地以 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) 在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 …
我有一个大矩阵,我想从中收集一组子矩阵.如果我的矩阵是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循环.任何帮助将非常感激