我有一个名为Event
的179X59条目的单元格数组,每个元素都是< 1X14>双重
所以例如Event{1,1}
是一个14位的二进制数...就像0 1 0 0 0 0 0 0 0 0 1 0 0 0
一样,它通过第1到第14列展开,所以每列都有一个位。
现在我的任务是索引单元格数组的每个元素并进入double并指定一个特定的字母表,如果我看到1
,则为第一位指定a。
因此,如果我的字母表是二进制1 1 1 1 1 1 1 1 1 1 1 1 1 1
的A到N,则需要获取
A B C D E F G H I J K L M N
而不是那个二进制数。
因此,对于第二行0 1 0 0 0 0 0 0 0 0 1 0 0 0
中的示例,我需要得到
0 B 0 0 0 0 0 0 0 0 K 0 0 0
最后应该返回B,K
删除零。
我尝试将每个元素分配到矩阵并尝试使用strrep
,但它没有帮助我。
答案 0 :(得分:1)
不删除零:
alphabet = [11:24]; %// numbers. Replace values as needed
resultzeros = bsxfun(@times, alphabet, vertcat(Event{:}));
resultzeros = reshape(mat2cell(resultzeros, ones(1, size(resultzeros,1))), size(Event));
如果您需要删除零:
result = cellfun(@(x) nonzeros(x).', resultzeros, 'uni', 0);
或直接:
result = cellfun(@(x) alphabet(x~=0), Event, 'uni', 0);
示例:
>> Event = {[0 0 1 0], [1 1 1 1]; [1 1 0 0], [0 0 1 1]};
>> alphabet = [4 5 6 7];
给出
result{1,1} =
6
result{2,1} =
4 5
result{1,2} =
4 5 6 7
result{2,2} =
6 7
答案 1 :(得分:0)
我认为时间并不重要,所以你至少可以循环。粗略草图:
alphabet = {A, B, C, D, E...}
j= 0;
for i=1:nBit
if( Event{1,1}(i) == 1)
EventAlphabet{1,1}{j} = alpabet{i};
j = j + 1;
end
end
你的问题有点不清楚,所以我的答案是粗略的草图,可能会帮助你。
答案 2 :(得分:0)
<强>代码强>
cellfun(@(x) cellstr(char(nonzeros(x.*[65:65+numel(x)-1])))', Event,'uni',0)
<强>结果
样本Event
:
Event = {
[0 1 0 1 0 0 1] [0 1 0 1 0];
[0 1 1 1 0] [0 0 0 1 1 1 0 0 0 0 1 1 0 1]}
输出 -
>> Event{:}
ans =
0 1 0 1 0 0 1
ans =
0 1 1 1 0
ans =
0 1 0 1 0
ans =
0 0 0 1 1 1
>> out{:}
ans =
'B' 'D' 'G'
ans =
'B' 'C' 'D'
ans =
'B' 'D'
ans =
'D' 'E' 'F'
当然,Event
位于“上层”的列数和行数保持在out
-
>> Event
Event =
[1x7 double] [1x5 double]
[1x5 double] [1x14 double]
>> out
out =
{1x3 cell} {1x2 cell}
{1x3 cell} {1x6 cell}