Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何从文本文件中读取列并相应地存储它们?_Matlab_File_Matrix - Fatal编程技术网

Matlab 如何从文本文件中读取列并相应地存储它们?

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,第二列是值。但是,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    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来创建一个具有空值的矩阵。或者,创建一个单元格数组,它可以处理这样的输入。