在MATLAB中,如何将每100个数字的每一列矩阵分开

在MATLAB中,如何将每100个数字的每一列矩阵分开,matlab,matrix,calculated-columns,Matlab,Matrix,Calculated Columns,在MATLAB中,我有一个80000*20的矩阵。我想计算第1列(0-100)中前100个数字的平均值、最大值和最小值,第1列(101-200)中下一个(第二个)100个数字,第1列(201-300)中第三个100个数字,等等。所有列的模拟。我想我需要一种循环来分离矩阵,因为矩阵的维数很大。我该怎么做 例如: 矩阵: A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 C1 C2 C3 C4 C5 D1 D2 D3 D4 D5 E1 E2 E3 E4 E5 F1 F2 F3 F4 F5

在MATLAB中,我有一个80000*20的矩阵。我想计算第1列(0-100)中前100个数字的平均值、最大值和最小值,第1列(101-200)中下一个(第二个)100个数字,第1列(201-300)中第三个100个数字,等等。所有列的模拟。我想我需要一种循环来分离矩阵,因为矩阵的维数很大。我该怎么做

例如: 矩阵:

A1 A2 A3 A4 A5

B1 B2 B3 B4 B5

C1 C2 C3 C4 C5

D1 D2 D3 D4 D5

E1 E2 E3 E4 E5

F1 F2 F3 F4 F5

然后我想要A1 B1 C1的平均值,最小值和最大值,以及D1 E1 F1的平均值,最小值和最大值。柱2(A2 B2 C2)和(D2 E2 F2)、3、4、5、6等的模拟

问候,


Vincent

以下是两种可能解决方案的示例。一个使用循环。另一个将矩阵转换为单元格数组,使用
cellfun
对单元格数组执行操作,然后将答案转换回矩阵

%# Build random matrix X
T = 12;
N = 3;
X = randi(100, T, N);

%# Set the number of elements in each mean, min, and max calculation
K = 4;

%# Determine the number of groups
L = T / K;
if mod(L, 1) ~= 0; error('Number of rows not integer divisible by number of elements per group'); end

%# Loop based solution
Soln1 = nan(L, N);
for k = 1:K-1
    Soln1(k, :) = mean(X(k * K - K + 1:k * K, :));
end

%# Loop-less solution
CellOfMat = mat2cell(X, K * ones(L, 1), N);
Soln2 = cellfun(@mean, CellOfMat, 'UniformOutput', 0);
Soln2 = cell2mat(Soln2);

我已经为上面示例中的
mean
函数完成了求解。在替换这些函数后,
max
min
的情况很简单。

这里有一个不使用单元格的替代无循环解决方案

% M is the 80000x20 matrix
rows_per_dataset = 100;
rows_in_solution = size(M,1)/rows_per_dataset;

% flatten out the matrix so each column is one dataset
M_grouped = reshape(M,rows_per_dataset,rows_in_solution*size(M,2));
means = mean(M_grouped);
means = reshape(means,rows_in_solution,size(M,2));
% the value in each row and column is the mean of the corresponding dataset
% in the original data

但是,对于足够大的数据集,将数据复制到临时变量效率低下,基于循环的解决方案更好。

欢迎使用堆栈溢出。为了便于将来参考,在这里发布问题时,通常会发布一些代码,指示您已经尝试过的内容。如果你能记住这一点,对于未来,我们将不胜感激。Cheers.ps如果您觉得我的回答解决了您的问题,请单击旁边的勾号来标记所回答的问题。这非常有用,谢谢您的帮助!但事实上,对于大型矩阵,基于循环的解决方案可能更好。