gpt4 book ai didi

matlab将文件解析为元胞数组

转载 作者:行者123 更新时间:2023-12-01 15:19:45 26 4
gpt4 key购买 nike

我在 matlab 中有一个格式如下的文件:

user_id_a: (item_1,rating),(item_2,rating),...(item_n,rating)
user_id_b: (item_25,rating),(item_50,rating),...(item_x,rating)
....
....

所以每一行都有用冒号分隔的值,其中冒号左边的值是一个代表 user_id 的数字,右边的值是 item_ids(也是数字)和评级(数字不是 float )的元组。

我想将此数据读入 matlab 元胞数组或更好但最终将其转换为稀疏矩阵,其中 user_id 表示行索引,item_id 表示列索引并将相应的评分存储在该数组索引中。 (这会起作用,因为我先验地知道我的宇宙中的用户和项目的数量,所以 id 不能大于那个)。

如有任何帮助,我们将不胜感激。

到目前为止,我已经按如下方式尝试了 textscan 函数:

c = textscan(f,'%d %s','delimiter',':')   %this creates two cells one with all the user_ids
%and another with all the remaining string values.

现在,如果我尝试执行类似 str2mat(c{2}) 的操作,它会起作用,但它也会在矩阵中存储“(”和“)”字符。我想以我上面描述的方式存储一个稀疏矩阵。

我是 matlab 的新手,非常感谢有关此事的任何帮助。

最佳答案

f = fopen('data.txt','rt'); %// data file. Open as text ('t')
str = textscan(f,'%s'); %// gives a cell which contains a cell array of strings
str = str{1}; %// cell array of strings
r = str(1:2:end);
r = cellfun(@(s) str2num(s(1:end-1)), r); %// rows; numeric vector
pairs = str(2:2:end);
pairs = regexprep(pairs,'[(,)]',' ');
pairs = cellfun(@(s) str2num(s(1:end-1)), pairs, 'uni', 0);
%// pairs; cell array of numeric vectors
cols = cellfun(@(x) x(1:2:end), pairs, 'uni', 0);
%// columns; cell array of numeric vectors
vals = cellfun(@(x) x(2:2:end), pairs, 'uni', 0);
%// values; cell array of numeric vectors
rows = arrayfun(@(n) repmat(r(n),1,numel(cols{n})), 1:numel(r), 'uni', 0);
%// rows repeated to match cols; cell array of numeric vectors
matrix = sparse([rows{:}], [cols{:}], [vals{:}]);
%// concat rows, cols and vals into vectors and use as inputs to sparse

示例文件

1: (1,3),(2,4),(3,5)
10: (1,1),(2,2)

这给出了以下稀疏矩阵:

matrix =
(1,1) 3
(10,1) 1
(1,2) 4
(10,2) 2
(1,3) 5

关于matlab将文件解析为元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com