Matlab 如何对指定列数的矩阵列求和?
我有一个矩阵Matlab 如何对指定列数的矩阵列求和?,matlab,matrix,sum,Matlab,Matrix,Sum,我有一个矩阵a,大小2500 x 500。我想对每10列求和,并将结果作为大小为2500 x 50的矩阵B。也就是说,B的第一列是A的前10列之和,B的第二列是A的后10列之和,依此类推 如果没有for循环,我怎么做?因为我必须这样做数百次,而且使用for循环这样做非常耗时。首先,我们“块整形”A,这样我们就有了所需的列数。因此,我们必须尽可能地对其进行推广。然后,我们只需要沿着第二个轴求和,并重塑为原始形状 下面是一个需要求和的五列示例: %示例输入数据 A=重塑(1:100,10,10)。'
a
,大小2500 x 500
。我想对每10列求和,并将结果作为大小为2500 x 50的矩阵B
。也就是说,B
的第一列是A
的前10列之和,B
的第二列是A
的后10列之和,依此类推
如果没有for
循环,我怎么做?因为我必须这样做数百次,而且使用for循环这样做非常耗时。首先,我们“块整形”A
,这样我们就有了所需的列数。因此,我们必须尽可能地对其进行推广。然后,我们只需要沿着第二个轴求和,并重塑为原始形状
下面是一个需要求和的五列示例:
%示例输入数据
A=重塑(1:100,10,10)。'
[r,c]=尺寸(A);
%要求和的列数
n_cols=5;
%块整形为n_cols,请参见https://stackoverflow.com/a/40508999/11089932
B=重塑(排列(重塑(A,r,n列,[]),[1,3,2]),[],n列);
%沿第二轴求和
B=总和(B,2);
%重塑原形
B=重塑(B、r、c/n)
这就是输出:
A=
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
B=
15 40
65 90
115 140
165 190
215 240
265 290
315 340
365 390
415 440
465 490
希望有帮助 首先,我们“块整形”A
,这样我们就有了所需的列数。因此,我们必须尽可能地对其进行推广。然后,我们只需要沿着第二个轴求和,并重塑为原始形状
下面是一个需要求和的五列示例:
%示例输入数据
A=重塑(1:100,10,10)。'
[r,c]=尺寸(A);
%要求和的列数
n_cols=5;
%块整形为n_cols,请参见https://stackoverflow.com/a/40508999/11089932
B=重塑(排列(重塑(A,r,n列,[]),[1,3,2]),[],n列);
%沿第二轴求和
B=总和(B,2);
%重塑原形
B=重塑(B、r、c/n)
这就是输出:
A=
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
B=
15 40
65 90
115 140
165 190
215 240
265 290
315 340
365 390
415 440
465 490
希望有帮助 这可以通过以下方法完成。这种方法的一个优点是,即使组大小不除以列数(最后一个组较小),它也能工作:
在这个例子中
A =
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120
result =
15 40 23
75 100 47
135 160 71
195 220 95
255 280 119
315 340 143
375 400 167
435 460 191
495 520 215
555 580 239
这可以通过以下方式完成。这种方法的一个优点是,即使组大小不除以列数(最后一个组较小),它也能工作:
在这个例子中
A =
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120
result =
15 40 23
75 100 47
135 160 71
195 220 95
255 280 119
315 340 143
375 400 167
435 460 191
495 520 215
555 580 239
我借用了你的数据:-)我借用了你的数据:-)多么奇妙的功能啊多么奇妙的功能!:-)