gpt4 book ai didi

matlab - bsxfun 是否可用于稀疏矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:59 26 4
gpt4 key购买 nike

我想将逐个元素的二元运算应用于大型逻辑向量。这些向量的内容是错误的,因此出于性能考虑,最好使用稀疏矩阵。如果我这样做,结果矩阵是不正确的。

例子

A = logical([0;1;0;0]);
B = logical([0 0 1 1]);

C = bsxfun(@and,A,B)

在这种情况下 C 是

 C = 
0 0 0 0
0 0 1 1
0 0 0 0
0 0 0 0

如果我使用稀疏矩阵 C 是

 C = full(bsxfun(@and,sparse(A),sparse(B)))
C =
0 0 0 0
1 1 1 1
0 0 0 0
0 0 0 0

这显然是错误的。

是我监督了什么还是这是 Matlab 错误。

最佳答案

我可以重现这个,所以它看起来肯定是一个 MATLAB 错误。特别是考虑到:

C = full(bsxfun(@times,sparse(A),sparse(B)))

C =

0 0 0 0
0 0 1 1
0 0 0 0
0 0 0 0

所以,我会向 The Mathworks 报告。

但是,在这种特殊情况下,我不禁觉得使用稀疏矩阵的 bsxfun 并不是最有效的。请考虑以下事项:

A = sparse(logical([0;1;0;0]));
B = sparse(logical([0 0 1 1]));

C_bsxfun = bsxfun(@and,full(A),full(B));

[i j] = ndgrid(find(A), find(B));
C_sparse = sparse(i, j, true, numel(A), numel(B));

isequal(C_bsxfun, full(C_sparse))

关于matlab - bsxfun 是否可用于稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429795/

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