如何让一个匿名函数为变量的输入数据

12个视图(30天)
你好,
我试图产生一个匿名函数传入的数组结构,将它转换成一个结构数组(可能抵消指数为每个输入)。到目前为止我一直在做它使用一个匿名函数,但我试图找出如何推广。
到目前为止我有:
同步= @ (x, fna) [x (1)。(fna) (shape_params.indices {1}),
x (2)。(fna) (shape_params.indices {2})];
所以当我称之为我给它的数组结构(x)和字段名(fna),我想创建的输出数组。shape_param。在dices is a cell array that tells me which entries I want from each of the entries in the array of structs.
例子:
XX (1)。= (1:10)';
XX (2)。= (2:11)';
shape_params。在dices{1} = (2:5)';
shape_params。在dices{2} = (1:4)';
YY。一个=同步(XX,“一个”)
应该给我:
YY。= (2,2,3,3,4,4,5,5];
我可以定义同步在XX容纳条目的数量仅创建一个开关。但是现在我需要推广它,因为我不想做一个switch语句,16个品种。
任何建议我如何能做到,向量的数目不详,我结合?
谢谢你,丹
1评论
丹·K
丹·K 2013年2月7日
编辑:丹·K 2013年2月7日
我应该提及:XX和YY实际上是对象,而不是结构,虽然我不相信任何变化。
我就能够创建一个条目sub-anonymous功能,让我选择我想要的:
extract_one = @ (x, fna), n) x (n) (fna) (shape_params.indices {n});
但是如果我试试:
YY = [extract_one (XX,“一个”1:n))
得到:
标量这种类型的多级索引所需指数。

登录置评。

接受的答案

塞德里克Wannaz
塞德里克Wannaz 2013年2月7日
很难实现条件语句在匿名函数(它需要一个测试函数);你为什么要使用一个匿名函数?你不能简单地做一些类似下面的?
data = [XX (:)。一个);(shape_params idx =。指标{}):;
YY。= cell2mat (arrayfun (@ (c)数据(idx: c, c), 1:尺寸(数据,2),
“UniformOutput”、假));
5个评论
丹·K
丹·K 2013年2月8日
塞德里克,
我现在看到区别了。是的,它确实工作。它不是那么“性感”这样做很好地包含匿名函数,但它的目的。我欢迎更多的评论,但我要接受这个答案。

登录置评。

答案(1)

麦克卢尔塔克
麦克卢尔塔克 2013年2月8日
不确定我完全理解你,丹,但这是你想做什么?这是一个匿名函数版本。你可以考虑做一个私有方法相反,但是如果需要匿名,这似乎完成工作。
f = @(对象、指标)%函数头
arrayfun (@ (k)对象(k) .field(指标{k}),%得到指数obj (k)
1:长度(对象),% k = 1: n。
“UniformOutput”、假);在细胞%输出。
my_struct_array (1)。场= (1:10)';
my_struct_array (2)。场= (2:2:20)';
my_indices = {1:5, 6:10};
f (my_struct_array my_indices)
同样,如果指标保证是相同的长度,然后你可以输出矩阵,而不是通过添加cell2mat单元阵列(…)在arrayfun (…)。
希望有帮助。

类别

找到更多的在开始使用MATLAB帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!