Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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_Matrix_Integer_Double - Fatal编程技术网

如何将索引的双数值转换为整数,以便在MATLAB中创建稀疏矩阵?

如何将索引的双数值转换为整数,以便在MATLAB中创建稀疏矩阵?,matlab,matrix,integer,double,Matlab,Matrix,Integer,Double,我正在使用MATLAB加载一个文本文件,我想用它制作一个稀疏矩阵。文本文件中的列引用行索引,为double类型。我需要它们是整数,以便能够将它们用作行和列的索引。我尝试使用uint8、int32和int64将它们转换为整数,以使用它们构建稀疏矩阵,如下所示: ???输入的未定义函数或方法“稀疏” “int64”类型的参数。 ==>在5处建立网络时出错 图形=稀疏(int64(listedges(:,1))、int64(listedges(:,2))、一(size(listedges,1),1))

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

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

图形=稀疏(int64(listedges(:,1))、int64(listedges(:,2))、一(size(listedges,1),1))


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

无需任何转换,保留索引
double

r = round(listedges);
graph = sparse(r(:, 1), r(:, 2), ones(size(listedges, 1), 1));

有两个原因可以解释为什么要转换为
int

第一,因为您有数据类型限制。
第二,您的输入可能包含分数,不适合用作整数

如果由于第一个原因需要转换,则无需:默认情况下,Matlab使用
double
类型,并且通常将
double
视为int(例如,当用作索引时)


然而,如果你想因为第二个原因(数字可能是小数)而转换成整数,那么你应该使用
round()
ceil()
floor()
-任何最适合你的理由。

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

如果您使用Matlab以外的任何语言编程,您都会熟悉如何节省内存空间,尤其是大型结构。能够用索引而不是double来处理此类结构中的元素是关键


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

当我这样做时,我会得到错误
???使用==>稀疏索引到矩阵时出错必须是整数。错误==>make_network at 6 graph=sparse(listedges(:,1),listedges(:,2),one(size(listedges,1),1))@Vass那么这可能是因为listedges不是一个整数。我已经修改了答案。谢谢,但我仍然得到错误:
???使用==>稀疏索引到矩阵时出错必须是整数。错误==>make_network at 8 graph=sparse(r(:,1),r(:,2),one(size(listedges,1),1))我做了'class(cel(col1(:))ans=double'和
class(round(col1(:))ans=double)
来构造一个稀疏矩阵,matlab希望索引是double类型的整数。因此,您可以调用
sparse(round(listedges(:,1)),round(listedges(:,2)),1)double
sI仍然会得到错误
???使用==>稀疏索引到矩阵时出错必须是整数。错误==>make_network at 9 graph=sparse(round(listedges(:,1)),round(listedges(:,2)),1)
是否可能
listedges
的元素小于1?当
round
ed为零或负时?
K>>min(listedges(:,1))ans=1k>>min(listedges(:,2))ans=1
的元素,我也怀疑没有比1更低的元素。