【问题标题】:How do I organize this data into structures in MATLAB?如何在 MATLAB 中将这些数据组织成结构?
【发布时间】:2009-12-11 17:19:00
【问题描述】:

n=5,下面的代码给了我一个n随机生成节点的图。这些节点不是结构(只是绘制点),但我想为每个节点分配一条消息,就像我为 sinksource 所做的那样,并跟踪节点的身份和位置。

例如,如果 node 4 具有 (x,y) 坐标 (.3452 , .5463),我也想将 node 4 分配给 msgtemp_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'

【问题讨论】:

  • 您可能希望在问题的代码位前添加 4 个空格。它将使其更具可读性。

标签: arrays matlab matlab-struct


【解决方案1】:

我建议创建一个结构数组来存储与每个“节点”关联的所有数据。您可以通过以下方式调用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 是一个N×1 结构数组,其中包含xymessagevalue 字段。您可以使用通常的数组和字段索引来访问和修改数据:

>> 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

【讨论】:

  • 向你致敬,我的朋友,这正是我想要的,上帝保佑你,你的天才
  • 在运行这段代码时,它给了我以下错误,请你检查一下我的朋友吗? ??? “double”类型的输入参数的未定义函数或方法“randi”。 ==> 10 索引处的定向扩散错误 = randi(N,[1 2]); %# 随机选择两个节点
  • @gnovice :我尝试使用 rand 而不是 randi,但它不起作用。请看一下,告诉我怎么做,谢谢
  • 函数 RANDI 仅存在于较新版本的 MATLAB 中。我讨论了在这个答案中使用的另一个选项来回答你的其他问题:stackoverflow.com/questions/1816097/…
  • @gnovice :正如你所说 index= randi(N,[1 2]);将随机选择两个节点,但如果我使用 index = ceil(rand*N);它只选择一个节点。但是,我的代码要求是两个节点,这些节点是什么。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 2021-05-23
  • 1970-01-01
  • 2012-09-14
  • 2020-05-20
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多