如何在MATLAB中实现动态大小的数据结构?

时间:2019-04-23 21:27:38

标签: matlab data-structures data-science

我正在尝试在MATLAB中实现动态大小的数据结构。

我有一个带有节点的2D平面。对于每个节点,我需要将坐标和节点周围的坐标保存在距离例如100 想象一下,每个节点周围的半径为100的圆。我想为每个节点存储此圈子内的所有节点。

例如:

-----------------------------------------------
|                                             |
|   x                                         |
|                                  x          |
|                                             |
|         x                                   |
|                               x             |
|                    x                        |
|                                             |
|        x                                    |
-----------------------------------------------

我试图如下所示实现它。我创建一个NodeList,其中每个节点都包含一个NodeStruct。每个NodeStruct都包含其相应节点的坐标以及其周围节点的数组。我想到的实现问题是变量NodeStruct.NextNode会为每个节点更改其大小。

我对如何找到所有节点有一个想法,我的问题是存储所有必要信息的数据结构。

NodeList = [];
NodeStruct.Coords = [];
NodeStruct.NextNode = [];

1 个答案:

答案 0 :(得分:2)

您可以创建一个索引的结构数组,如下所示:

NodeStruct(3).Coords = [x,y];
NodeStruct(3).NextNode = [1,2,6,10];

但是,用邻接矩阵可以更好地解决此问题。那是一个NxN矩阵,节点数为N,如果节点adj(i,j)i在给定的距离内,则j为真。在这种情况下,邻接矩阵是对称的,但是如果您列出每个节点的10个最近节点,则不必如此。这种情况也可以通过邻接矩阵来处理。

给出一个坐标为coord的Nx2矩阵,其中每一行是一个节点的坐标,您可以编写:

dist = sqrt(sum((reshape(coord,[],1,2) - reshape(coord,1,[],2)).^2, 3));
adj = dist < 100; % or whatever your threshold is