如何对复数使用Shuffle.c索引模式



我想使用shuffle.c在三维上打乱一个3d数组。到目前为止,我已经使用了性能良好的Shuffle(arr,3)。现在我试着做同样的事情,但用复数数组,得到这个错误:

*** Shuffle[mex]: Use index mode for complex input! 

我还没有找到使用索引模式的正确方法。非常感谢。

您是否验证了输入大小的更好性能?对于一维混洗的3D矩阵,最好不要使用具有上述语法的MEX函数。它迫使MATLAB将整个矩阵复制到mex并返回。比较:

arr=rand(100,100,100);
t.mexshuffle=timeit(@()(Shuffle(arr,3)));
t.randperm=timeit(@()arr(:,:,randperm(size(arr,3))));
t.mexindexshuffle=timeit(@()arr(:,:,Shuffle(size(arr,3),'index')));

结果是:

struct with fields:
mexshuffle: 0.0183
randperm: 0.0038
mexindexshuffle: 0.0037

Shuffle与index选项或randperm一起使用并不重要,但直接使用Shuffle的速度较慢。副作用不错,后面的两个选项支持复数。

上面的代码可能有点难以阅读,这里是建议解决方案的更干净版本:

P=randperm(size(arr,3)); % Permutation vector, use whichever generator you prefer.
%P=Shuffle(size(arr,3),'index');
arr_out=arr(:,:,P);

相关内容

  • 没有找到相关文章

最新更新