我正试图在一些标记为(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(这样的向量附加到数组?这个问题当然比这个例子更一般。
您有一个映射Z→R3。这可以简单地实现为2D矩阵。假设顶点标签是[1100]范围内的整数。创建矩阵:
map = nan(100,3);
现在CCD_ 1是与节点CCD_ 2相关联的3D矢量。您可以为节点分配新值,但也可以附加新节点:
map(end+1,:) = [1,2,3];
但请注意,分配给映射之外的节点将导致零值节点插入现有条目和新条目之间:
map(200,:) = [1,2,3];
将导致节点100-199为CCD_ 3。
要将矢量[i,j,k]
分配给节点号i+(j-1)*4+(k-1)*16
,对于[1,4]范围内的所有i
、j
、k
,可以使用ndgrid
:
[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];
如果在相对紧凑的范围内用整数值以外的其他值来标识顶点,则以上内容将崩溃。如果标识符是任意大的整数、浮点数、字母或单词,那么最简单的解决方案是使用map(i,:)
0。不过,这要慢几个数量级。我建议使用整数来表示节点。