Matlab 如何从文本文件中读取列并相应地存储它们?
我试图读取一个包含两列的文本文件,并将其存储在矩阵中。第一列是id,第二列是值。但是,id元素不符合顺序。我想读取文件,并有一个2D矩阵,其中每个id都被分配到相应的值。例如,如果txt文件如下所示:Matlab 如何从文本文件中读取列并相应地存储它们?,matlab,file,matrix,Matlab,File,Matrix,我试图读取一个包含两列的文本文件,并将其存储在矩阵中。第一列是id,第二列是值。但是,id元素不符合顺序。我想读取文件,并有一个2D矩阵,其中每个id都被分配到相应的值。例如,如果txt文件如下所示: id value ======= 1 45 2 83 4 37 3 56 1 73 4 91 1 45,73 2 83 3 56 4 37,91 我希望矩阵是这样的: id value ======= 1 45 2
id value
=======
1 45
2 83
4 37
3 56
1 73
4 91
1 45,73
2 83
3 56
4 37,91
我希望矩阵是这样的:
id value
=======
1 45
2 83
4 37
3 56
1 73
4 91
1 45,73
2 83
3 56
4 37,91
我有类似的东西,但它不起作用:
infle='txtfile.txt';
数据=输入数据(填充);
id=数据(:,1);%数据文本文件的第1列指定了变量x
值=数据(:,2);%第2列指定了变量y
xvalues=零(最大(id),1000);
对于i=1:长度(id)
对于j=1:最大值(id)
如果i==j
xvalue(j)=[xvalue(j),value(i)];
结束
结束
结束
它说:
无法执行分配,因为左侧和右侧的元素数不同
对于这一行:
xvalues(j) = [xvalues(j) ,value(i)];
我如何解决这个问题?请仔细阅读评论
% Given Data
data = [1 45;2 83;4 37;3 56;1 73;4 91];
id = data(:, 1);
value = data(:,2);
% Find the number occurences of each index
occurence = histcounts(id);
% Fill xvalues with nan as 0 is also a number
% Don't waste memory, by setting the column to the maximum occurence + 1
% First column is for the index
xvalues = nan.*zeros(max(id),max(occurence)+1);
for i = 1:max(id)
% First column is the index
xvalues(i, 1) = i;
% Start filling column with value at column 2
k = 2;
for j = 1: length(id)
if i == id(j)
xvalues(i, k) = value(j);
% Used in case there is any repeating value
k = k + 1;
end
end
end
输出
xvalues =
1 45 73
2 83 NaN
3 56 NaN
4 37 91
可能的版本使用
将为您提供一个单元格数组:
在任何一个段落中
大小(左)
必须是大小(右)
当然,你不能在更少的空间里放更多的东西。在您的例子中,size(xvalues(j)
与size([xvalues(j),value(i)])不同)
显然,你不能把一个放进另一个。这很基本,我建议使用matlab toturial来更好地理解这一点。我想把值附加到矩阵中相应的id上。因为矩阵每行的长度是可变的,因为一个id可以有任意数量的值。有什么办法吗?你不能有一个矩阵在matlab中,每行的大小是可变的,根据定义,不是矩阵。好的,如果我想将其固定为1000,那么我如何向每行添加新值?您可以添加0/nan来创建一个具有空值的矩阵。或者,创建一个单元格数组,它可以处理这样的输入。