【问题标题】:How to convert logical sparse matrix into integer sparse matrix in MATLAB?如何在MATLAB中将逻辑稀疏矩阵转换为整数稀疏矩阵?
【发布时间】:2014-01-28 01:40:08
【问题描述】:

我有一个矩阵https://www.cise.ufl.edu/research/sparse/matrices/Hamm/add20.html 我想将其视为相应图的邻接矩阵,因此我将每个非零元素替换为 1:

A = A ~- 0

现在我想计算 A*A 但我不能,因为

>> A*A    
Error using *
Both logical inputs must be scalar.
To compute elementwise TIMES, use TIMES (.*) instead

由于某种原因,我不能将逻辑矩阵转换为整数

>> uint(A)
Error using numerictype (line 172)
Invalid arguments (WordLength must be a scalar numeric value).

Error in fixdt (line 186)
        embeddedType = numerictype( varargin{:} );

Error in uint (line 14)
DataType = fixdt(0,WordLength,0);

我可以通过来回将矩阵转换为全等级来做到这一点,但这对我的任务来说是不切实际的。

【问题讨论】:

    标签: matlab matrix sparse-matrix


    【解决方案1】:

    首先,您可能希望使用uint8 或类似名称,而不是uint - 阅读帮助文件以了解区别是什么,uint 不会按照您的想法执行。但是,根据this 论坛帖子,唯一有效的稀疏数据类型是doublelogical。您有一个逻辑矩阵,但似乎没有为逻辑矩阵定义稀疏矩阵乘法。因此,您必须将 A 转换为 double 形式,然后才能按照您的尝试进行乘法运算。

    或者,改用A^2 - 这将适用于逻辑稀疏矩阵。不知道为什么不一样。

    【讨论】:

    • 感谢您的回复。 A^2 看起来确实很奇怪,看看它为什么起作用会很有趣......
    • @Moonwalker:A^2 的结果是双精度,所以mpower 可能会事先转换A(因此结果当然可以大于一个)。不知道为什么mtimes 不这样做。
    猜你喜欢
    • 2017-07-02
    • 2023-04-10
    • 2021-11-25
    • 2013-05-28
    • 2018-01-19
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多