matlab创建0和1的事务数组

时间:2014-10-20 14:41:11

标签: arrays matlab cell-array

我有一个包含65个元素的标题单元格

header = 'id, item1, item2, item3, ..., item64'               

我还有一个10000x1的单元格,其id为:

T1  
T2  
T3
...
T10000

最后我有一个1x10000的单元阵列,其中包含以下内容。例如:

cell{1} = 'T1' 'Item1' 'Item5'
cell{2} = 'T2' 'Item45'
...
cell{10000} = ...

每个可变长度(可变数量的项目)。

我需要创建一个矩阵/数组,基本上是第1行中的标题,后续行中的每个事务,如果该项在事务中,则为1,否则为0。像这样:

id | item1 | item2 | item3 | ... | item64  
T1 | 0     | 1     | 0       ...
T2 | 1     | 0     | 0       ...

依此类推,所以我最终会得到一个65x10000阵列

我尝试过使用MATLAB函数ismember,但无法解决如何在数组中循环它,更不用说创建数组了。我尝试创建一个零数组但是当我尝试将每个事务放入每一行时它不起作用,因为字符串有不同的长度。

感谢所有人都能在MATLAB中阐明如何做到这一点

1 个答案:

答案 0 :(得分:1)

这是一个简化的例子:

% list of all item strings
items = strtrim(cellstr(num2str((1:6)','Item%d'))).';

% cell array of individual items for each row
cells = cell(3,1);
cells{1} = {'T1' 'Item1' 'Item5'};
cells{2} = {'T2' 'Item4'};
cells{3} = {'T3' 'Item2' 'Item3', 'Item4'};

% membership matrix
M = cell2mat(cellfun(@(c) ismember(items, c(2:end)), cells, 'Uniform',false))

% matching IDs
ids = cellfun(@(c) c{1}, cells, 'Uniform',false)

结果:

M =
     1     0     0     0     1     0
     0     0     0     1     0     0
     0     1     1     1     0     0

ids = 
    'T1'
    'T2'
    'T3'