MATLAB中的二进制数组

3
如果我有一个初始数组A,包含从1到20的二十个数字,顺序排列。
 A = [1,2,3,4,5,...,20]

并且有另一个随机数组B:
  B = [1, 15, 3, 20, 7]

想要输出一个形如列向量C的列。
  C = [1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1]

请注意,在 B 有值的索引处,C 的索引为 1。
我已经尝试了以下方法:
n=20;
C = zeros(n, 1);
for i=1:length(B)
   C(B(i))=1;
end

1
"A" 和任何事情有什么关系? - Eitan T
3个回答

2
在一行代码中:
full(sparse(B,1,1,max(B),1))

你还可以放弃使用full函数,因为大多数MATLAB矩阵操作都可以处理稀疏矩阵。但是当然这取决于你想要做什么。


2

另一个一行代码:

C = accumarray(B(:), 1, [], @(x)1)

1
如果B中存在重复的值,请使用“logical()”进行包装。 - Simon
@Simon:干得好,谢谢。我用了稍微不同的方法解决了它(以保持结果为“double”类型)。 - Amro
+1:accumarray 实际上是专门为这些事情而设计的,我为什么没想到呢 :p - Gunther Struyf

1
这是一个与IT相关的翻译内容:

这里是一个向量化解决方案:

首先,初始化C


   C = zeros( max(B),1);

然后使用数组索引:

   C(B) = 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接