2

我正在使用 MATLAB 加载一个我想从中制作稀疏矩阵的文本文件。文本文件中的列指的是行索引并且是double类型。我需要它们是整数才能将它们用作行和列的索引。我尝试使用uint8,int32并将int64它们转换为整数以使用它们来构建稀疏矩阵,如下所示:

???“int64”类型的输入参数的未定义函数或方法“稀疏”。==> make_network 在 5 处出错

图 =sparse(int64(listedges(:,1)),int64(listedges(:,2)),ones(size(listedges,1),1));

如何将加载为双精度的文本文件条目转换为sparse函数使用?

4

3 回答 3

2

不需要任何转换,保留索引double

r = round(listedges);
graph = sparse(r(:, 1), r(:, 2), ones(size(listedges, 1), 1));
于 2013-04-02T09:47:24.207 回答
1

有两个原因可能需要转换为int
第一个,因为您有数据类型限制。
第二,您的输入可能包含分数并且不适合用作整数。

如果您因为第一个原因想要转换 - 那么没有必要:Matlabdouble默认使用类型,并且通常将doubles其视为整数(例如,当用作索引时)。

但是,如果您因为第二个原因(数字可能是小数)而想要转换为整数,那么您应该使用round(),ceil()floor()- 最适合您的目的。

于 2013-04-02T09:54:27.650 回答
0

还有另一个很好的理由(实际上是主要的......)为什么人们可能想要将任何结构(数组、矩阵等)的索引转换为 int。

如果您曾经使用 Matlab 以外的任何语言进行编程,您就会熟悉想要节省内存空间,尤其是对于大型结构。能够使用非双精度索引来处理此类结构中的元素是关键。

Matlab 的一个主要问题是无法以这种方式更精细地控制多维结构的大小。有稀疏矩阵解决方案,但在许多情况下这些解决方案还不够。元胞数组将在访问时保留数据类型,但是元胞数组中每个元素的存储在存储方面非常浪费(封装在一个元胞中的单个 uint8 需要 113 个字节)。

于 2013-09-03T15:30:01.327 回答