使用需要输入的匿名函数时,如何在Matlab中访问向量

我正在尝试改组尚未定义的向量 向量由[0 0 0 ... 0 0 1 2 3 ... (n-zer)]

组成
  • n:向量的长度
  • zer:开头的零个数字

像这样:

PartZeroPartNum=@(zer,n) [zeros(1,zer),1:(n-zer)];
shuffled=@(zer,n) PartZeroPartNum(zer,n)(randperm(n));

这部分不起作用

PartZeroPartNum(zer,n)(randperm(n))

给出错误:

  

无法调用或索引到临时数组

相反,如果我这样操作,它将起作用:

n=100;
PartZeroPartNum=logical([zeros(1,1:(n-zer)]);
shuffled=@() PartZeroPartNum(randperm(n));

是否可以像我上面尝试的那样改组更通用的矢量?也许以另一种方式?

原因是我需要许多随机向量的示例,因此我想先创建此匿名函数,然后像下面这样轻松地采样:

ShVec= shuffled(50,100);
zhanglijulia 回答:使用需要输入的匿名函数时,如何在Matlab中访问向量

有更好的方法,但是您可以添加另一个匿名函数

PartZeroPartNum=@(zer,n) [zeros(1,zer),1:(n-excited)];
fIndex = @(x,ii) x(ii);
shuffled=@(zer,n) fIndex(PartZeroPartNum(zer,n),randperm(n));

如评论中所述,最好在其自己的m文件中使用函数,这将是Cris建议的最易读的选项。

,

A(index)等效的函数调用为subsref(A,struct('type','()','subs',{index})),请参见here

因此您可以设置匿名功能

PartZeroPartNum=@(zer,1:(n-excited)];
shuffled=@(zer,n) subsref(PartZeroPartNum(zer,{randperm(n)});

但是我不会这样做,因为它不太可读。

本文链接:https://www.f2er.com/3159237.html

大家都在问