Pular para o conteúdo
Hub Nexus

MATLAB ProgrammingPágina 34 de 42

MATLAB Programming, Arrays, Struct Arrays

Introduction to Structures

MATLAB provides a means for structure data elements. Structures are created and accessed in a manner familiar for those accustomed to programming in C.

MATLAB has multiple ways of defining and accessing structure fields. See Declaring Structures for more details.

Note: Structure field names must begin with a letter, and are case-sensitive. The rest of the name may contain letters, numerals, and underscore characters. Use the namelengthmax function to determine the maximum length of a field name.

Declaring Structures

Structures can be declared using the struct command.

>> a = struct('b', 0, 'c', 'test')
a =
b: 0
c: 'test'

In MATLAB, variables do not require explicit declaration before their use. As a result structures can be declared with the '.' operator.

>> a.c = 'test'
a =
c: 'test'

Structures can be declared as needed and so can the fields.

Arrays of Structures

Structures can also be arrays. Below is an example

>> a = struct('b', 0, 'c', 'test');  % Create structure
>> a(2).b = 1;  % Turn it into an array by creating another element
>> a(2).c = 'testing'
a =
1x2 struct array with fields:
b
c
>> a(1)  % Initial structure
ans =
b: 0
c: 'test'
>> a(2)  % The second element
ans =
b: 1
c: 'testing'

Accessing Fields

When the field name is known the field value can be accessed directly.

>> a.c
ans =
test
ans =
testing

In some cases you may need to access the field dynamically which can be done as follows.

>> str = 'c';
>> a(1).(str)
ans =
test
>> a(1).c
ans =
test

Accessing Array Elements

Any given element in a structure array can be accessed through an array index like this

>> a(1).c
ans =
test

To access all elements in a structure array use the syntax {structure.field}. In order to get all values in a vector or array use square brackets ([]) as seen below.

>> [a.('c')]
ans =
testtesting
>> [a.('b')]
ans =
0 1

Or you can put them all into a cell array (rather than concatenating them) like this:

>> {a.('c')}
ans = {'test', 'testing'}

Assigning values to a field of each struct array element

Matlab provides tools to assign values to a field of each array element.
Consider the following struct array:

foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})

The following command assigns the same value to the field_b field of each array element:

value = 1;
[foo.field_b] = deal(value)

To assign different values to each array element:

value = {4,8,12,16};
[foo.field_b] = value{:}

Sub-arrays through logical addressing

With Matlab, it's possible to extract a subarray from an array by using logical indexing. Consider the following struct array:

foo = struct('field_a',{1,2,3,4},'field_b',{4,8,12,16})

To obtain a subarray from foo where all foo.field_a values are equal to 2, a boolean array can be used to perform logical indexing.
So, a boolean test that returns a boolean array for this purpose would be:

[foo.field_a] == 2

So, by using this boolean array to perform logical indexing, Matlab defines a struct array whose elements consist of those from foo whose field_a value is equal to 2 by doing:

foo([foo.field_a] == 2)

Where this page came from

This page was imported from Wikibooks. From “MATLAB Programming” on Wikibooks, by its contributors, under CC BY-SA 4.0. Changed here: set as a page; navigation and edit links left out; each image under its own licence, credited in its caption.

Nobody has written it yet — it is the source material at a new address, which is why search engines are asked to skip it and why no one earns from it. It is up for grabs: take it on, and it is yours to rewrite and to earn from.