matlab - 带有矩阵键的 Matlab 哈希表
问题描述
我想在Matlab中构建一个哈希表,其键是不同大小的矩阵,其值也是矩阵。该类containers.Map
只允许字符串作为键。我当然可以只使用一个单元格作为键,一个单元格作为值并匹配两个单元格的索引。有没有更好的方法来构造哈希表和相关的哈希函数?
解决方案
我只是玩containers.Map
了一下,似乎您可以使用任意长度的 char 数组作为键。
>> a = containers.Map;
>> a(repmat('bla',50,500)) = 1;
>> a(repmat('bla',50,500))
ans =
1
您还可以将任何数值数组转换为 char 数组,如下所示:
>> x = randn(4)
x =
-0.7371 -0.0799 0.1129 -1.1667
-1.7499 0.8985 0.4400 -1.8543
0.9105 0.1837 0.1017 -1.1407
0.8671 0.2908 2.7873 -1.0933
>> s = char(typecast(x(:),'uint8')')
s =
''uÔ_þ翼qÿû¿/å\¬"í?éúè#¿ë?.YðjÛs´¿Ó¶Ó·PÀì?+Ç? Õ9NÒ?Üéñé¼?
°À9-(Ü?ç¥ìƺ?NsivL@V*aó¨ªò¿{Ò5«ý¿Q8ß:@ò¿í=µU~ñ¿'
或使用以下允许的完整 16 位 Unicode 值char
:
>> s = char(typecast(x(:),'uint16')')
s =
'疺㓦쁁뿛쓆遫뿅䅀庲뿋ꁰ頳劜㿡礋쮼㿘旈帡㿨ﮢ电玼㿼譍醪㿳랝趚蠷뿴瞶ꆲ쀂伴愹?㿬ꑨ廆뿽㼝ὧ㾱?ﺳ⩝㾢棑罓턽䀁ᕾ統렆뾱'
因此,将这些放在一起,可以使用任何数组(正确转换为 char 数组)作为哈希表的键:
>> a(s) = 5;
>> a(s)
ans =
5
并且,给定数字数组转换为char
,也可以将其转换回数字数组(尽管数组的形状会丢失):
x = randn(1,20);
s = char(typecast(x,'uint8'));
y = typecast(uint8(s),'double');
assert(isequal(x,y)) % does not throw an error
还有另一种选择。如文档中所述,可以使用与字符串不同类型的containers.Map
键。键可以是字符数组,也可以是数字标量;它们不能是数值数组:
>> a = containers.Map('KeyType','double','ValueType','double');
>> a(5) = 10;
>> a([5,3]) = 5;
Error using containers.Map/subsasgn
Specified key type does not match the type expected for this container.
因此,您可以从数组中计算哈希值(作为浮点双精度值或 64 位整数值)。我不知道如何最好地做到这一点,也许是具有一组随机值的点积?在这个相关的问题上,有一些建议。MATLAB File Exchange 上也有一些有用的函数(例如这里和这里)。
推荐阅读
- python - 我们可以在python代码中使用包含linux命令结果的变量吗
- javascript - 当我一次又一次单击“添加待办事项”按钮时,它会多次显示消息。我怎样才能只制作一次
- javascript - 使用 HTML 和 JavaScript,我如何存储用户的选择并将这些值作为输入参数传递?
- java - 计数排序问题
- laravel - Laravel - 未定义的变量:多个提交按钮中的请求
- installation - 为什么 Inno Setup 中没有选中自定义页面上的单选按钮?
- amazon-web-services - MongoDB - 6.01 秒后 AWS lambda 无服务器超时
- python - 查询 Pandas DataFrame:如何使用之前定义的字符串变量进行过滤?
- c++ - 从程序中删除旧数据
- python - psutil - “系统空闲进程” CPU 百分比使用率超过 100%