我有两个数组, x
和y
。 x
是函数的输入和y
是函数值。 例如, x = [ 1 2 3 4 5 6 7 8 9 10]
y = [ 3 6 2 4 1 6 7 0 1 8 ]
两者是相同的长度。
假设我有一个另一个数组z
含有[ 2 3 8 9 10 3]
未长度相同x
和y
),是否有产生输出的任何功能[6 2 0 1 8 2]
返回值在对应索引)不通过数组的每个元素使用for循环?
非常感谢
EDIT1 *我该怎么办,如果阵列中的数字不是整数?
我认为,你只是想:
y(z);
这将返回y向量的第i个元素。 您可能希望
y(x(z));
这将返回在你的例子同样的结果,因为x
是刚刚经历10值1。
有了这两种的z
只能包含正整数,而在第二种情况下x
还只能包含正整数。
如果您使用的是MATLAB版本更新比2008B,你可以使用containers.Map类做你想要什么,甚至非整数,非连续的或非数字的值:
x = [ 1 2 3 4 5 6 7 8 9 10];
y = [ 3 6 2 4 1 6 7 0 1 8 ];
z = [ 2 3 8 9 10 3];
F = containers.Map(x,y);
% for a single element:
Fz1 = F(z(1))
% for multiple elements at the same time, you need to use arrayfun
Fz = arrayfun(@(x)(F(x)),z)
地图类实际上是创建一个所谓的HashMap,这样你就可以映射到其他值几乎所有的值(例如字符串,细胞阵列,...)。
当该项目不存在,它会返回一个错误。
如果您无法使用MATLAB 2008B或更新的版本,有三种可能的非整数域值。
使用插值方法,如interp1
。 这可能给(在那些没有事先提供的值)假值。 您可以通过使用检查这种情况下ismember(z, x)
其次,你可以从非整数到整数(例如,如果所有的值是0.5的倍数,乘以2)发明自己的方案,并使用该解决方案奥利显示。
另一种解决方案是使用struct
s到模仿地图的行为。 然后你只需要你的域值有效的字段名称(即字符串是在MATLAB有效的变量名,这可以通过使用可以转换genvarname
功能)。
最后这两个方案都有点脏,容易出错,如果你不采取四舍五入考虑。 所以,我只看到他们作为最后的手段。