如何在 MATLAB 中存储 .csv 数据并计算平均值
How to store .csv data and calculate average value in MATLAB
有人可以帮助我了解如何在 matlab 中保存一组 .csv 文件,select 只保存我感兴趣的列,并得到一个最终文件作为输出,其中我有平均值y 列的值和 y 轴的标准偏差?我的matlab不太好,所以请问有没有人帮我解决这个问题。
这是我到目前为止尝试做的事情:
clear all;
clc;
which_column = 5;
dirstats = dir('*.csv');
col3Complete=0;
col4Complete=0;
for K = 1:length(dirstats)
[num,txt,raw] = xlsread(dirstats(K).name);
col3=num(:,3);
col4=num(:,4);
col3Complete=[col3Complete;col3];
col4Complete=[col4Complete;col4];
avgVal(K)=mean(col4(:));
end
col3Complete(1)=[];
col4Complete(1)=[];
%columnavg = mean(col4Complete);
%columnstd = std(col4Complete);
% xvals = 1 : size(columnavg,1);
% plot(xvals, columnavg, 'b-', xvals, columnavg-columnstd, 'r--', xvals, columnavg+columstd, 'r--');
B = reshape(col4Complete,[5000,K]);
m=mean(B,2);
C = reshape (col4Complete,[5000,K]);
S=std(C,0,2);
现在我知道我应该使用 mean()
函数在 for 循环中计算均值和标准差,但我不确定如何使用它。
which_column = 5;
dirstats = dir('*.csv');
col3Complete=[]; % Initialise as empty matrix
col4Complete=[];
avgVal = zeros(length(dirstats),2); % initialise as columnvector
for K = 1:length(dirstats)
[num,txt,raw] = xlsread(dirstats(K).name);
col3=num(:,3);
col4=num(:,4);
col3Complete=[col3Complete;col3];
col4Complete=[col4Complete;col4];
avgVal(K,1)=mean(col4(:)); % 1st column contains mean
avgVal(K,2)=std(col4(:)); % 2nd column contains standard deviation
end
%columnavg = mean(col4Complete);
%columnstd = std(col4Complete);
% xvals = 1 : size(columnavg,1);
% plot(xvals, columnavg, 'b-', xvals, columnavg-columnstd, 'r--', xvals, columnavg+columstd, 'r--');
B = reshape(col4Complete,[5000,K]);
meanVals=mean(B,2);
我没有做太多改变,只是将你的数组初始化为空数组,这样你以后就不必删除第一个条目,并使 avgVal
成为一个列向量,第 1 列的平均值和标准第 1 列中的偏差。如果您还想为 csv 中的第 3 列收集这些统计信息,您当然可以添加两列。
附带说明:xlsread
对于读取文件来说相当繁重,因为 Excel 效率极低。如果要读取csv等结构化文件,使用importdata
.
会更快
创建一些随机矩阵以存储在文件中 header:
A = rand(1e3,5);
out = fopen('output.csv','w');
fprintf(out,['ColumnA', '\t', 'ColumnB', '\t', 'ColumnC', '\t', 'ColumnD', '\t', 'ColumnE','\n']);
fclose(out);
dlmwrite('output.csv', A, 'delimiter','\t','-append');
使用csvread
加载它:
data = csvread('output.csv',1);
data
现在包含您的五列,没有任何 header。
有人可以帮助我了解如何在 matlab 中保存一组 .csv 文件,select 只保存我感兴趣的列,并得到一个最终文件作为输出,其中我有平均值y 列的值和 y 轴的标准偏差?我的matlab不太好,所以请问有没有人帮我解决这个问题。
这是我到目前为止尝试做的事情:
clear all;
clc;
which_column = 5;
dirstats = dir('*.csv');
col3Complete=0;
col4Complete=0;
for K = 1:length(dirstats)
[num,txt,raw] = xlsread(dirstats(K).name);
col3=num(:,3);
col4=num(:,4);
col3Complete=[col3Complete;col3];
col4Complete=[col4Complete;col4];
avgVal(K)=mean(col4(:));
end
col3Complete(1)=[];
col4Complete(1)=[];
%columnavg = mean(col4Complete);
%columnstd = std(col4Complete);
% xvals = 1 : size(columnavg,1);
% plot(xvals, columnavg, 'b-', xvals, columnavg-columnstd, 'r--', xvals, columnavg+columstd, 'r--');
B = reshape(col4Complete,[5000,K]);
m=mean(B,2);
C = reshape (col4Complete,[5000,K]);
S=std(C,0,2);
现在我知道我应该使用 mean()
函数在 for 循环中计算均值和标准差,但我不确定如何使用它。
which_column = 5;
dirstats = dir('*.csv');
col3Complete=[]; % Initialise as empty matrix
col4Complete=[];
avgVal = zeros(length(dirstats),2); % initialise as columnvector
for K = 1:length(dirstats)
[num,txt,raw] = xlsread(dirstats(K).name);
col3=num(:,3);
col4=num(:,4);
col3Complete=[col3Complete;col3];
col4Complete=[col4Complete;col4];
avgVal(K,1)=mean(col4(:)); % 1st column contains mean
avgVal(K,2)=std(col4(:)); % 2nd column contains standard deviation
end
%columnavg = mean(col4Complete);
%columnstd = std(col4Complete);
% xvals = 1 : size(columnavg,1);
% plot(xvals, columnavg, 'b-', xvals, columnavg-columnstd, 'r--', xvals, columnavg+columstd, 'r--');
B = reshape(col4Complete,[5000,K]);
meanVals=mean(B,2);
我没有做太多改变,只是将你的数组初始化为空数组,这样你以后就不必删除第一个条目,并使 avgVal
成为一个列向量,第 1 列的平均值和标准第 1 列中的偏差。如果您还想为 csv 中的第 3 列收集这些统计信息,您当然可以添加两列。
附带说明:xlsread
对于读取文件来说相当繁重,因为 Excel 效率极低。如果要读取csv等结构化文件,使用importdata
.
创建一些随机矩阵以存储在文件中 header:
A = rand(1e3,5);
out = fopen('output.csv','w');
fprintf(out,['ColumnA', '\t', 'ColumnB', '\t', 'ColumnC', '\t', 'ColumnD', '\t', 'ColumnE','\n']);
fclose(out);
dlmwrite('output.csv', A, 'delimiter','\t','-append');
使用csvread
加载它:
data = csvread('output.csv',1);
data
现在包含您的五列,没有任何 header。