【问题标题】:matlab create transaction array of 0's and 1'smatlab创建0和1的交易数组
【发布时间】:2014-10-20 23:04:26
【问题描述】:

我有一个包含 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 中执行此操作

【问题讨论】:

  • 为什么不使用单元矩阵?
  • 什么是细胞矩阵?我知道matlab有矩阵类型和单元格类型吗?
  • 我的意思是细胞类型。在通常的矩阵中混合字符串和值时会遇到问题。
  • 我曾计划使用一种单元格类型,到目前为止,我的每个事务都在一个单元格中,但我无法将单元格中的这些单独的字符串放入包含 0 和 1 的矩阵中

标签: arrays matlab cell-array


【解决方案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'

【讨论】:

  • 我可以看到它是如何工作的,但是当我这样做时,我的 M 是一个 1x65,0000 单元格,我假设它不会每 65 个项目进入一个新行。
  • @GrantMcKinnon:你没有发布任何工作代码,所以我必须自己做一个例子。我们将需要看看您如何实际构建阵列才能提供帮助......
  • 感谢您给出的答案,我找到了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多