把逻辑矩阵转化为字符串向量

45视图(30天)
嗨。我有逻辑矩阵 idx 和字符串数组 vec
idx =逻辑([0 1 0;0 0 1;1 0 0;1 0 0;0 1 0))
vec = [“一个”,“B”,“C”]
每一行的 idx 表明哪个字母(从 vec )应该分配给这一行。
期望的结果是:
结果= [“B”;“C”;“一个”;“一个”;“B”]
有一种‘应用’矩阵 idx 一系列矩阵,或者类似如下:
temp = repmat(矢量,[大小(idx, 1), 1])
临时(idx)%这回报但并不像预期的那样

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年5月1日
编辑:沃尔特·罗伯森 2021年5月1日
idx =逻辑([0 1 0;0 0 1;1 0 0;1 0 0;0 1 0))
idx =5×3逻辑数组
0 1 0 0 0 1 1 0 0 1 0 0 0 1 0
vec = [“一个”,“B”,“C”]
vec =1×3的字符串数组
“A”“B”“C”
vec (idx (: 1) * 1 + idx (:, 2) * 2 + idx (:, 3) * 3)。
ans =5×1的字符串数组
“C”“A”“B”“B”
vec (idx *(1:尺寸(idx 2)。“)”。
ans =5×1的字符串数组
“C”“A”“B”“B”

更多的答案(3)

哈里斯K。
哈里斯K。 2020年10月17日
顺便说一句,这里有一个解决方案:
vec (idx arrayfun (@ (i)(我,:)),1:尺寸(idx, 1))”
但我想知道如果有东西不使用任何直接或间接的for循环。

布鲁诺陈德良
布鲁诺陈德良 2021年5月1日
编辑:布鲁诺陈德良 2021年5月1日
假设idx每行有一个1
idx =逻辑([0 1 0;0 0 1;1 0 0;1 0 0;0 1 0]);
vec = [“一个”,“B”,“C”];
[r、c] =找到(idx);
结果vec (c) (r) =
结果=1×5字符串数组
“C”“A”“B”“B”

Yvan Lengwiler
Yvan Lengwiler 2021年5月9日
(我写的回答如上评论。对不起。这是作为一个正式的答案。)
当然,即使一个解决方案并没有使用一个循环的Matlab程序代码,将会有一个循环的ultimapte机器代码。没有代码的Matlab程序可以提高文本的易读性对于人类来说,但它并不明显改善execusion的速度。
无论如何,这是一个解决方案:
idx =逻辑([0 1 0;0 0 1;1 0 0;1 0 0;0 1 0]);
vec = [“一个”,“B”,“C”];
tempvec = repmat vec”,[大小(idx”(2), 1]);
tempidx = idx ';tempidx = tempidx (:);
结果= tempvec (tempidx) '
2的评论

登录置评。

类别

找到更多的在字符和字符串帮助中心文件交换

s manbetx 845


释放

R2019b

社区寻宝

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

开始狩猎!