在MATLAB中,我想使用以参数输入为结构的函数对一组数据进行插值。但是,我收到一个错误。
我有一个结构:
fruit.apples = [3 4 2 3 4]
fruit.oranges = [1 0 0 0 0]
fruit.grapes = [2 3 2 2 1]
所以我想将此水果结构插入到samples = 20
;`
这是我的代码:
function [output] = fruitbasket (fruit, samples)
sampleLength = linspace(1, numel(data), samples + numel(data));
sampleLength = sampleLength';
output = interp1(data, sampleLength);
我的愿望输出是在水果篮结构中用25个苹果,25个橙子和25个葡萄对每个数组进行插值。如果将结构替换为变量,代码可以工作,但是我需要使用结构,以便可以将多个输入传递给函数。
答案 0 :(得分:1)
您可以使用structfun
将一个函数应用于struct数组的每个元素。在这种情况下,它将如下所示:
fruit.apples = [3 4 2 3 4];
fruit.oranges = [1 0 0 0 0];
fruit.grapes = [2 3 2 2 1];
samples = 20;
interp_data = @(d)interp1(d, linspace(1, numel(d), samples + numel(d)));
output = structfun(interp_data, fruit, 'UniformOutput',false);
structfun
需要一个在输入结构的每个字段上调用的函数的句柄。我们创建一个匿名函数传递给它,然后在其中填充其他参数。如果结构中的元素都是不同大小,则OP中的sampleLength
是在此匿名函数中计算的。最后,我们将'UniformOutput'
设置为false
,以告知structfun
返回相同大小的结构,而不是返回每个输入字段一个值的普通数组。