如何在MATLAB中将这些数据组织成结构? [英] How do I organize this data into structures in MATLAB?
问题描述
对n=5
说,下面的代码为我提供了n
随机生成的节点的图.这些节点不是结构(只是绘制的点),但是我想像为sink
和source
一样为每个节点分配一条消息,并跟踪节点的身份和位置.
例如,如果node 4
具有(x,y)坐标(.3452 , .5463)
,我也想为node 4
分配msg
和temp_value
.我该怎么办?
代码:
n = input('No. of Nodes:');
sink = [0 0];
source = [1 1];
node = rand(n,2)
x = node(:,1);
y = node(:,2);
x1 = sink(:,1);
y1 = sink(:,1);
x2 = source(:,1);
y2 = source(:,1);
plot(x,y,'o')
hold on
plot(x1,y1,'r*')
hold on
plot(x2,y2,'r*')
hold on
sink = struct;
sink.msg = 'temp';
sink.temp_value = '30'
source = struct;
source.msg = 'temp';
source.temp_value = '30'
我建议创建一个结构数组,存储与每个节点"关联的数据的 all .您可以通过一次调用来为节点创建所有数据. STRUCT 通过以下方式:
N = 5; %# Number of nodes
coords = num2cell(rand(N,2)); %# Cell array of random x and y coordinates
nodes = struct('x',coords(:,1),... %# Assign x coordinates
'y',coords(:,2),... %# Assign y coordinates
'message','temp',... %# Assign default message
'value',30); %# Assign default value
变量nodes
是具有字段x
,y
,message
和value
的 N-by-1 结构数组.您可以使用通常的数组和字段索引来访问和修改数据:
>> nodes(1) %# Contents of node 1
ans =
x: 0.4387
y: 0.4898
message: 'temp'
value: 30
>> nodes(1).message %# Message for node 1
ans =
temp
>> nodes(1).message = 'hello world!'; %# Change message for node 1
然后您可以通过以下方式绘制节点:
plot([nodes.x],[nodes.y],'r*'); %# Plot all the nodes in red
index = randi(N,[1 2]); %# Pick two nodes at random
hold on;
plot([nodes(index).x],[nodes(index).y],'b*'); %# Plot 2 random nodes in blue
Say for n=5
, the following code gives me a plot for n
randomly generated nodes. These nodes are not structures (just plotted points), but I want to assign every node a message just as I did for sink
and source
and keep track of the nodes identity and location.
For example, if node 4
has (x,y) coordinates (.3452 , .5463)
, I want to assign node 4
a msg
and temp_value
as well. How can I do this?
Code:
n = input('No. of Nodes:');
sink = [0 0];
source = [1 1];
node = rand(n,2)
x = node(:,1);
y = node(:,2);
x1 = sink(:,1);
y1 = sink(:,1);
x2 = source(:,1);
y2 = source(:,1);
plot(x,y,'o')
hold on
plot(x1,y1,'r*')
hold on
plot(x2,y2,'r*')
hold on
sink = struct;
sink.msg = 'temp';
sink.temp_value = '30'
source = struct;
source.msg = 'temp';
source.temp_value = '30'
I would suggest creating an array of structures that stores all of the data associated with each "node". You can create all of the data for your nodes with one call to STRUCT in the following way:
N = 5; %# Number of nodes
coords = num2cell(rand(N,2)); %# Cell array of random x and y coordinates
nodes = struct('x',coords(:,1),... %# Assign x coordinates
'y',coords(:,2),... %# Assign y coordinates
'message','temp',... %# Assign default message
'value',30); %# Assign default value
The variable nodes
is an N-by-1 structure array with fields x
, y
, message
, and value
. You can access and modify the data using the usual array and field indexing:
>> nodes(1) %# Contents of node 1
ans =
x: 0.4387
y: 0.4898
message: 'temp'
value: 30
>> nodes(1).message %# Message for node 1
ans =
temp
>> nodes(1).message = 'hello world!'; %# Change message for node 1
You can then plot the nodes in the following way:
plot([nodes.x],[nodes.y],'r*'); %# Plot all the nodes in red
index = randi(N,[1 2]); %# Pick two nodes at random
hold on;
plot([nodes(index).x],[nodes(index).y],'b*'); %# Plot 2 random nodes in blue
这篇关于如何在MATLAB中将这些数据组织成结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!