matlab中双单元阵列的索引
我有一个名为matlab中双单元阵列的索引,matlab,indexing,double,cell,cell-array,Matlab,Indexing,Double,Cell,Cell Array,我有一个名为Event的单元格数组,包含179X59个条目,每个元素都是双精度的 例如,事件{1,1}是一个14位的二进制数。。类似于01100001000,它通过第1列到第14列展开,因此每列都有一个位 现在,我的任务是通过单元格数组的每个元素建立索引,进入double并指定一个特定的字母表,如果我看到1,那么在第一位指定a 因此,如果我的字母表是从A到N的二进制11,需要 A B C D E F G H I J K L M N而不是该二进制数 因此,对于第二行给出的示例,我需要得到 0B00
Event
的单元格数组,包含179X59个条目,每个元素都是双精度的
例如,事件{1,1}
是一个14位的二进制数。。类似于01100001000
,它通过第1列到第14列展开,因此每列都有一个位
现在,我的任务是通过单元格数组的每个元素建立索引,进入double并指定一个特定的字母表,如果我看到1
,那么在第一位指定a
因此,如果我的字母表是从A到N的二进制11
,需要
A B C D E F G H I J K L M N
而不是该二进制数
因此,对于第二行给出的示例,我需要得到
0B000000
最后应该返回B,K
删除零
我尝试将每个元素分配到一个矩阵,并尝试使用strrep,但这对我没有帮助。我认为时间不是关键,所以至少可以循环。草图:
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
你的问题有点不清楚,所以我的回答是一个大概的草图,可以帮助你不需要删除零。:
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];
给予
代码
cellfun(@(x) cellstr(char(nonzeros(x.*[65:65+numel(x)-1])))', Event,'uni',0)
结果
对于示例事件
:
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}
A
etc是数字,对吗?感谢各位的回复,这些回复应该会有所帮助,谢谢Aton@user3683939如果有任何答案帮助你解决你的问题,请考虑通过点击答案左上角的绿色复选标记来接受它。@ USER 36839 39阅读关于接受答案的更多信息。
>> Event
Event =
[1x7 double] [1x5 double]
[1x5 double] [1x14 double]
>> out
out =
{1x3 cell} {1x2 cell}
{1x3 cell} {1x6 cell}