迅速将国家名称转换为数字

15的观点(30天)
人工智能
人工智能 2012年4月6日
我有230个国家的名字我想转换为数值矩阵数据文件丢失三位数的ISO代码。我有一个表转换名称代码但是我不确定匹配的最快的方法是什么名字,代之以号码。谁有好的建议吗?

接受的答案

Kye泰勒
Kye泰勒 2012年4月6日
我猜你的表是一个n除以2单元阵列,其中第一列包含细胞的内容是每个国家的名称,第二列包含细胞相关的ISO代码。就像3×2单元阵列用命令创建的
国家= {“中国”;秘鲁的;“西班牙”};
代码=兰迪(10、长度(国家),1);
C =[国家,num2cell(代码)];
然后,我还以为你230个国家名字是真的在一个单元中创建的命令
listOfCountriesAsCell = {C{兰迪(3230 1),1}}';
或者,如果他们在一个矩阵(这意味着char数组吗?),你的国家类似于数组列表创建的命令
listOfCountriesAsString = char (listOfCountriesAsCell};
无论哪种方式,你可以转换命令
c = 1:长度(国家)
idx = strcmpi (C {C, 1}, listOfCountriesAsCell);%
listOfCountriesAsCell (idx 1) = C (C, 2);%转换是在这里完成的
结束
c = 1:长度(国家)
idx = strcmpi (C {C, 1}, cellstr (listOfCountriesAsString));%
listOfCountriesAsCell (idx 1) = C (C, 2);%转换是在这里完成的
结束
如果这些假设不正确,请添加更多的细节。
2的评论
Kye泰勒
Kye泰勒 2012年4月6日
我的荣幸!谢谢你的评论。

登录置评。

更多的答案(2)

Gautam Vallabha
Gautam Vallabha 2012年4月6日
您可以使用 containers.Map
首先,填充地图(假设你的换算表是Nx2单元阵列):
关联= containers.Map;
i = 1:元素个数(conversionTable)
关联(conversiontable {1}) = conversiontable {2};
结束
然后,运行在你的国家名单和应用地图
i = 1:元素个数(mylist)
countrycode (i) =关联(mylist{我});
结束

沃尔特·罗伯森
沃尔特·罗伯森 2012年4月6日
使用一个 完美散列 如果真的必须很快完成。
当然构建最初的哈希表可能有点昂贵,这可能会诱使你哈希表存储到一个文件,但是你需要记住从磁盘加载信息可以比重新计算的信息慢得多。
考虑到这一点,你可能会发现 在实践中 (而不是 在理论上 )你的时间是通过使用类似ismember低得多()数组的索引和查找这些指数的ISO代码。
你是 真的 要执行这个230国家数百万次查找?如果不是那么你编写和测试的时间和记录 最快 查找要 超出的费用做查找一个直截了当的方式。
不成熟的优化是万恶之源(或者至少是大部分)编程。—Donald Knuth

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!