这个解决方案在R2015a或R2015b上不起作用。电路漂移的行为似乎发生了改变。例如,circshift(sparse(logical([1 2 3])),[0 1])在R2015b上返回所有的零。
嗨,彭,看来电路漂移的最后一次重大变化是在2014a(增加了dim selection)。我无法检查这个版本,2015a也返回false。不管怎样,(不是)好虫子:)。
你好,Jan,我也没有2014a。但是我可以在这里查看2013a: http://anycodes.cn(在左边,你可以选择运行MATLAB)。而circshift(sparse(logical([1 2 3])),[0 1])和circshift(sparse(+logical([1 2 3])),[0 1])在2015a和2015b上产生不同的输出,它们在2013a上给出相同的结果(直到一个类差)。
这绝对是个bug。看来最新版本的电路移位不能正确地处理稀疏逻辑矩阵。它以某种方式把真变成假,但把它们当作非零。这导致了一些有趣的逻辑性质,因为稀疏矩阵的算法的工作方式。检查以下代码:A = circshift(sparse([false false true false true]),[0 1]);一个非零();全(A), | 1, 1, ~, xor (A, 1), xor (A, 0)和(A)或(,),A = = ~ ~, isequal (A, ~ ~), isequal(| 0,), %(等);
B =稀疏([假的假的真的假的真]);B, B = B([end 1:end-1]),…
这是我最喜欢的:
C = circshift(稀疏(真正的),1);
哈哈,这绝对是一个有趣的例子来阐述电路移位/稀疏在处理稀疏逻辑矩阵时的不当行为。我同意你的观点,这是一个bug,但仍然不是很确定这个bug是由于circshift或稀疏。也许有人可以向MATHWORKS报告这个bug……