第一个问题: 你好!
我正在尝试分配此向量
v(mod(v,2)~=0)=0
操作应该用0替换向量中的奇数。我试图将此向量分配给函数中的结果变量。
当我尝试这个时出现问题 功能 function [result1,result2] = myfunction(v)
v(mod(v,2)==0)= 0;
result1 = v;
v(mod(v,2)~=0) = 0;
result2 = v;
return
问题2:
我试图想出一种以for循环格式表达函数cell2struct的替代方法
例如,
如果我们有一个包含食物标签的2维单元格数组。他们的名字,卡路里数和价格,每一列。我们是否可以编写一个函数,可以将单元格中的信息传递给包含上述每个字段的结构?
由于
答案 0 :(得分:1)
您正在将所有偶数设置为0,但是您使用此突变结果来搜索奇数并将它们设置为0.这可能无法提供您的预期使用原始向量的修改副本,因此在执行每个操作之前保留向量的副本是明智的。
function [result1,result2] = myfunction(v)
vcopy = v; %// Make a copy
vcopy(mod(vcopy,2)==0)= 0; %// Find even numbers and set to 0
result1 = vcopy;
vcopy = v; %// Make another copy
vcopy(mod(vcopy,2)~=0) = 0; %// Find odd numbers and set them to 0.
result2 = vcopy;
return
烨。如果您有f
中存储的字段名称列表及c
中存储的每个字段的相应实体,只需使用如下循环:
function [s] = my_cell2struct(c, f)
for idx = 1 : numel(f)
s.(f{idx}) = c{idx};
end
上述代码没有进行错误检查,因此您需要确保c
中的元素总数与f
的元素总数相匹配。此外,c
和f
必须是单元格数组。请注意,函数中根本没有声明s
。此外,使用点运算符结合括号和包含在括号内的字符串,可以动态创建字段名称。因此,对于f
中的每个字符串,我们访问c
中存储的相应值,并创建包含此值的字段名称。
以下是MathWorks文档中可重现的示例:
c = {'tree',37.4,'birch'};
f = {'category','height','name'};
s = cell2struct(c, f, 2)
s =
category: 'tree'
height: 37.4000
name: 'birch'
请注意,我在本地MATLAB中使用cell2struct
来生成上述结构。执行包含在名为for
的函数中的上述my_cell2struct
循环,我们得到:
c = {'tree',37.4,'birch'};
f = {'category','height','name'};
s = my_cell2struct(c, f)
s =
category: 'tree'
height: 37.4000
name: 'birch'