我有以下格式设置的百万行数据
User Gameid Count
A 1 2
A 2 3
A 10 2
A 8 2
B 10 2
B 1 6
....
我想从中创建一个稀疏矩阵,每行代表一个用户,代表gameid的列和每个单元格中的值是相应用户和gameid的计数。
矩阵稀疏。所以它应该由matlab处理。
如何在不迭代每行的情况下直接加载此类数据,这将耗费大量时间。有任何建议如何有效地做到这一点?
这就是我想要的
Column 1 2 3 4 5 6 7 8 9 10
2 3 2 2
6 2
答案 0 :(得分:1)
好的,你的文件是file.txt
好的,通过简单的操作,你可以得到你想要的东西:
clear all
close all
fil = 'file.txt';
fid = fopen(fil,'r');
s = textscan(fid,'%s','Delimiter','\n');
s = s{1};
s = s(2:end);
ls = length(s);
fmat = '%s %u %u';
C = sscanf(char(s)',fmat);
C = reshape(C,[3 length(s)])';
A = char(C(:,1));
data = cellstr(A);
data(:,2:3) = num2cell(C(:,2:3));
Users = unique(A);
S_MAT_DATA = spalloc(length(Users),max(C(:,2)),round(ls/length(Users))+1);
nmat = 1;
for aa = 1:length(Users)
data_user = cell2mat(data(strncmp(Users(aa),data(:,1),1),2:3)');
S_MAT_DATA(aa,data_user(1,:)) = data_user(2,:);
end
答案 1 :(得分:1)
我认为您可以使用textscan
。
fid = fopen(file);
content = textscan(fid, '%s%d%d');
user = content{1}; % cell
field = content{2}; % vector
count = content{3}; % vector