我在使用Matlab从.txt文件中读取数据时遇到了困难。
我必须使用.txt文件中的数据在Matlab中创建一个200x128维度数组。这是一项重复性任务,需要自动化。
.txt文件的每一行都是一个复数形式的a + ib,形式为[space] b。我的文本文件示例:
链接到文本文件:Click Here
(0)
1.2 2.32222
2.12 3.113
3.2 2.22
(1)
4.4 3.4444
2.33 2.11
2.3 33.3
(2)
(3)
(199)
我在括号内的.txt文件中有多行(X)。我的最终矩阵应该是200x128。在每个(X)之后,恰好有128个复数。
答案 0 :(得分:1)
这是我要做的。首先,从文本文件中删除“(0)”类型的行(甚至可以使用简单的shell脚本)。我把它放在名为post2.txt的文件中。
# First, load the text file into Matlab:
A = load('post2.txt');
# Create the imaginary numbers based on the two columns of data:
vals = A(:,1) + i*A(:,2);
# Then reshape the column of complex numbers into a matrix
mat = reshape(vals, [200,128]);
mat
将是200x128复杂数据的矩阵。显然,在这一点上你可以绕过这个循环多次这样做。
希望有所帮助。
答案 1 :(得分:1)
您可以使用以下功能读取数据:
function data = readData(aFilename, m,n)
% if no parameters were passed, use these as defaults:
if ~exist('aFilename', 'var')
m = 128;
n = 200;
aFilename = 'post.txt';
end
% init some stuff:
data= nan(n, m);
formatStr = [repmat('%f', 1, 2*m)];
% Read in the Data:
fid = fopen(aFilename);
for ind = 1:n
lineID = fgetl(fid);
dataLine = fscanf(fid, formatStr);
dataLineComplex = dataLine(1:2:end) + dataLine(2:2:end)*1i;
data(ind, :) = dataLineComplex;
end
fclose(fid);
(编辑)可以通过在格式字符串中包含(1)
部分并将其丢弃来改进此功能:
function data = readData(aFilename, m,n)
% if no parameters were passed, use these as defaults:
if ~exist('aFilename', 'var')
m = 128;
n = 200;
aFilename = 'post.txt';
end
% init format stuff:
formatStr = ['(%*d)\n' repmat('%f%f\n', 1, m)];
% Read in the Data:
fid = fopen(aFilename);
data = fscanf(fid, formatStr);
data = data(1:2:end) + data(2:2:end)*1i;
data = reshape(data, n,m);
fclose(fid);