Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何对指定列数的矩阵列求和?_Matlab_Matrix_Sum - Fatal编程技术网

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

我借用了你的数据:-)我借用了你的数据:-)多么奇妙的功能啊多么奇妙的功能!:-)