我认为答案是结果数组的大小,正如罗迪建议的那样:
>> mlf=sparse([],[],[],2^31+1,1); mlf(1)=1; size(mlf(mlf>0))
ans =
1 1
>> mlf=sparse([],[],[],2^31+1,1); mlf(1)=1; size(mlf)
ans =
2147483649 1
*编辑 1:索引工作正常:
>> mlf(mlf>0) = 2
mlf =
(1,1) 2
这在功能上等同于使用find
:
>> mlf(find(mlf)) = 2
mlf =
(1,1) 2
这似乎是一个很好的结论,即display
在 处为元素设置足够的空间来格式化输出(2147483649,1)
,但仅当您为该元素的分配建立索引时(想想左值与右值)。
*编辑 2:如果您要在完整(非稀疏)变量中追踪这些元素,请使用full
:
>> full(mlf(mlf>0))
ans =
1
* EDIT 3:根据尺寸mlf
而不是最后一个非零元素分配给最后一个元素,
>> mlf(numel(mlf))=77
mlf =
(1,1) 1
(2147483649,1) 77
*编辑 4:删除负值:
mlf(mlf<0)=0; % or mlf(find(mlf<0)) = 0;
如果您想复制并删除底片:
mlf2 = mlf;
mlf2(mlf2<0) = 0;
mlf3 = mlf;
mlf3(mlf3>0) = 0;
然后你有mlf
所有的价值观,mlf2
只有积极的,mlf3
只有消极的。这样做的关键是大小与原始大小保持一致,因此您可以根据稀疏的大小以原始方式mlf
使用诸如此类的东西,万岁!end