I have a huge text file in the following format:
1 2
1 3
1 10
1 11
1 20
1 376
1 665255
2 4
2 126
2 134
2 242
2 247
第一列是x
坐标,而第二列是y
坐标。
这意味着如果我需要构建一个矩阵
M = zeros(N, N);
M(1, 2) = 1;
M(1, 3) = 1;
.
.
M(2, 247) = 1;
这个文本文件非常大,无法一次性加载到内存中。我必须逐行读取并将其保存在一个稀疏矩阵中。
因此,我需要以下功能:
function mat = generate( path )
fid = fopen(path);
tline = fgetl(fid);
% initialize an empty sparse matrix. (I know I assigned Mat(1, 1) = 1)
mat = sparse(1);
while ischar(tline)
tline = fgetl(fid);
if ischar(tline)
C = strsplit(tline);
end
mat(C{1}, C{2}) = 1;
end
fclose(fid);
end
不幸的是,除了第一行之外,它只会在我的稀疏矩阵中放入垃圾。 演示:
1 7
1 9
2 4
2 9
如果我打印稀疏矩阵,我会得到以下结果:
(1,1) 1
(50,52) 1
(49,57) 1
(50,57) 1
有什么建议吗?
str2double()
将C{1}
和C{2}
转换为数字。但是,如果坐标文件太大无法加载到内存中,那么构建的稀疏数组也很可能会太大。我认为 MATLAB 在内部使用压缩稀疏列表示法,这比一组坐标点更占空间... - Justinpath
是一个内置函数,您不应该将其用作变量名。 - gnovice