multiply each element of structured array, assignment of structured array

I'm not exactly sure if I'm using the right terminology. I have
A(1).B = 5;
A(2).B = 6;
A(3).B = 7;
>>A.B
ans =
5
ans =
6
ans =
7
I have two questions: 1. I want to multiply each element of the structured array so that A.B*2 would equal 10,12,14 instead of 5,6,7. but instead I get the error
>>A.B*2
Error using *
Too many input arguments.
2. How do I make a copy of the structured array? I have tried but it just results in the first element.
>>C = A.B
C =
5
Likewise
>> C = A(1:3).B
C =
5
instead of C(1).B = 5, C(2).B = 6, and C(3).B = 7 like I want.

 Risposta accettata

The short answer is NO, it is not possible. However, ...
>> [A.B] = split( 2*[A.B] )
A =
1x3 struct array with fields:
B
>> A.B
ans =
10
ans =
12
ans =
14
where
function varargout = split( vec )
assert( nargout == numel( vec ) ...
, 'split:narginNargoutMismatch' ...
, 'The number of outputs should match the length of the input vector.')
varargout = num2cell( vec );
end

Più risposte (1)

Jan
Jan il 11 Mar 2013
Modificato: Jan il 11 Mar 2013
C = [A(1:3).B];
% or C = [A(:).B]
% or C = [A.B]
This replies [5,6,7]. To get C(1).B = 5, C(2).B = 6, C(3).B = 7:
C = A;
A direct multiplication is not possible. Structs are simply not designed for arithmetic operations, because this can be done with numerical arrays much better. But it is possible with a loop:
F = fieldnames(A);
for iF = 1:length(F)
aF = F{iF};
A.(aF) = A.(aF) * 2;
end

2 Commenti

In this case C is converted to an array. I want to be able to keep it a structured array.
I only want A.B to be copied and there are other fields associated with A that I don't want copied to C. thanks.
Hi! So I have a structure with a variable amount of entries. It will always be greater than 1. These stats (Area, MinFeret.. etc) need to be converted to mm. I tried to use the for loop approach, but it says there are too many inputs. Here is my code.
F= fieldnames(stats);
for iF = 1:length(F)
aF = F{iF};
stats.(aF) = stats.(aF) .* pixelSize;
end
Any advice for how I can make it work or another way to do this?

Accedi per commentare.

Categorie

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by