matlab - 如何在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) 之类的向量附加到数组中?这个问题当然比这个例子更笼统。
解决方案
你有一个映射 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
,您可以使用: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];
如果顶点在相对紧凑的范围内用非整数值标识,则上述情况会失效。如果您的标识符是任意大的整数、浮点数、字母或单词,那么最简单的解决方案是使用containers.Map
. 不过,这要慢几个数量级。我建议使用整数来表示节点。
推荐阅读
- javascript - 对象属性未定义,console.log()'d 后的一行
- python - 如何将两个 df 与两个不同的时间戳结合起来?
- python - Python-docx 模块不覆盖相同的文件名
- javascript - 在页面加载时运行脚本
- javascript - 当我调用“showPrevious”函数时,变量当前值不会改变
- database - 如何在 Firestore 中构造彩票开奖应用程序的数据?
- html - 如何使用 VBA 将 eBay 网站上的“已售数量”转换为 excel?
- python-3.x - 在 Python 中找不到 Selenium 的带有 driver.find_element_by_xpath 的链接元素
- javascript - 尝试从 pdo 查询构建服务器端数据表
- python - 根据另一个列表的字符串值对元组列表进行排序