【问题标题】:binary array in MATLABMATLAB中的二进制数组
【发布时间】:2012-06-15 00:50:51
【问题描述】:

如果我有一个包含 20 个数字的初始数组 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]

请注意,C 在 B 具有值的索引处具有 1。

我尝试了以下方法:

n=20;
C = zeros(n, 1);
for i=1:length(B)
   C(B(i))=1;
end

【问题讨论】:

  • A 有什么关系?

标签: matlab vector binary


【解决方案1】:

单线:

full(sparse(B,1,1,max(B),1))

你也可以去掉full函数,大多数matlab矩阵运算可以处理稀疏矩阵。但当然这取决于你真正想要做什么。

【讨论】:

    【解决方案2】:

    另一条线:

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

    【讨论】:

    • 将其包裹在logical() 中,以防B 中存在非唯一值。
    • @Simon:很好,谢谢。我以稍微不同的方式解决了它(保留double 类型的结果)。
    • +1: accumarray 实际上是专门为这类事情制作的,我为什么没有想到:p
    【解决方案3】:

    这是一个矢量化的解决方案:

    首先,初始化C

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

    然后使用数组索引:

       C(B) = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2011-12-24
      • 2017-01-26
      • 2012-01-24
      • 1970-01-01
      • 2011-02-22
      • 2016-04-07
      • 2011-08-16
      相关资源
      最近更新 更多