我在matlab中有结构和数组结构,如:
s.name = 'pop';
s.val1 = 2.3;
s.val2 = 4.3;
q = repmat( s, 5, 5 );
是否可以以矢量方式进行操作?
%// Something like this?
q(:,:).val1 = q(:,:).val1 + q(:,:).val2 * 0.2;
UPD:
谢谢你的回复。实际上,我在问“简单”(意思是“矢量方式”)。现在我看到使用结构是不可能的。所以唯一的方法是使用DreamBig建议的arrayfun之类的东西。或者使用数组结构。
答案 0 :(得分:0)
您可以创建一个可以执行所需操作的自定义类。
该类将包含' Val1
作为属性。它将override +
运算符放置一个名为plus
的函数。
classdef MyStruct
properties
Val1
end
methods
function this = MyStruct(val1)
if nargin ~= 0 % Allow nargin == 0 syntax
m = numel(val1);
this(m) = MyStruct(); % Preallocate object array
for i = 1:m
this(i).Val1 = val1(i);
end
end
end
function outRes = plus(this,other)
outRes(numel(this.Val1))=MyStruct();
for i=1:numel(this)
outRes(i).Val1 = this(i).Val1 + other(i).Val1;
end
end
end
end
以下是如何使用它:
m1 = MyStruct(1:3);
m2 = MyStruct([0 1 5]);
m3 = m1 + m2;
同样,您可以覆盖乘法运算符。