在现有 CSV 文件的末尾追加新行

Appending new rows at the end of an existing CSV file

我有一个 MATLAB 代码,它以数组的形式产生多输出,所有输出都有 20 行和 1 列,对于每次迭代,我都有相同的结果,即 5 个数组:InputFtn_Noise_real, Ftn_Noise_imag, After_Matchfilter_real, After_Matchfilter_imag(都是20行1列)。然后我在代码块中将这五个数组合并为一个数组(20 行和 5 列)。我尝试在 csvwrite 的帮助下将这个数组写入 csv 文件。但是在每次迭代中,它都会覆盖上一次迭代结果的新数据。

我想合并所有迭代的输出。例如,第一次迭代代码写入一个数组,该数组是这五个数组的组合,如数据图像所示,然后第二次迭代应该从第 20 行开始写入到第 40 行,依此类推。最后我得到了一个包含 80 行和 5 列的 csv 文件。

for EbNo = 0:2:4
%here some codes block produce array
.
.
.
%Writing part
filename = ['DATA' '.csv'];
%here ı merge all array as an one array. Then with csvwrite ı transfer these in a csv
newdata = [Input,Ftn_Noise_real,Ftn_Noise_imag,After_Matchfilter_real,After_Matchfilter_imag];
csvwrite(filename,newdata);
end

如果您使用的是 R2019a 或更新版本,则可以使用 writematrix。它还支持附加到现有文件:

filename = 'test.csv';
if (exist(filename, 'file'))
    delete(filename);
end
for i=1:4
    A = randi(3, 4);
    writematrix(A, filename, 'WriteMode', 'append');
end
readlines('test.csv')

但更好的方法是将所有矩阵合并为一个矩阵,然后通过调用 csvwritewritematrix 一次写入整个数据:

r = 3; % No. of rows
c = 4; % No. of columns
n_iter = 4; % No. of iterations
B = zeros(r*n_iter, c); % pre-allocating B matrix
for ii=1:n_iter
    A = randi(10, r, c);
    B(((ii-1)*r)+(1:r), :) = A; % appending A to the end of B
end
writematrix(B, filename);
readlines('test.csv') % test contents