首页 > 解决方案 > 如何在matlab中制作向量和数字之间的字典

问题描述

我正在尝试在标记为 (1,2,3...) 或 (a,b,c) 的一些图顶点及其位置之间创建一个字典,当该图嵌入三个维度时。例如,考虑三次点阵和位置 (i,j,k) 到数字 i+(j-1)*4+(k-1)*16 之间的映射。如何存储这张地图?我尝试了单元格数组 c=[];

但这不允许我将 (i,j,k, i+(j-1)*4+(k-1)*16) 之类的向量附加到数组中?这个问题当然比这个例子更笼统。

标签: matlab

解决方案


你有一个映射 Z → R 3。这可以简单地实现为二维矩阵。假设顶点标签是 [1,100] 范围内的整数。创建矩阵:

map = nan(100,3);

现在map(i,:)是与 node 关联的 3D 矢量i。您可以为节点分配新值,但也可以附加新节点:

map(end+1,:) = [1,2,3];

但请注意,分配给映射之外的节点将导致零值节点插入现有条目和新条目之间:

map(200,:) = [1,2,3];

将导致节点 100-199 为[0,0,0].


要将向量分配[i,j,k]给节点编号,对于范围 [1,4] 内i+(j-1)*4+(k-1)*16的所有i, j,您可以使用:kndgrid

[i,j,k] = ndgrid(1:4,1:4,1:4);
i = i(:);
j = j(:);
k = k(:);
map(i+(j-1)*4+(k-1)*16,:) = [i,j,k];

如果顶点在相对紧凑的范围内用非整数值标识,则上述情况会失效。如果您的标识符是任意大的整数、浮点数、字母或单词,那么最简单的解决方案是使用containers.Map. 不过,这要慢几个数量级。我建议使用整数来表示节点。


推荐阅读