2012-06-12 126 views
3

如果我有順序1〜20 20個的數字,二進制數組

A = [1,2,3,4,5,...,20] 

,並具有另一個隨機陣列B的初始數組A:

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 
+1

什麼'A'已經有什麼關係呢? –

回答

1

這裏是一個矢量化溶液:

首先,初始化C

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

然後使用數組索引:

C(B) = 1; 
2

在一個班輪:

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

,你也可能下降的full功能,最MATLAB矩陣運算可以處理稀疏矩陣。但是,這當然取決於你實際想要做什麼。

+1

+1:單線是MATLAB的禪宗。 –

2

另外一個班輪:

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

如果'B'中存在非唯一值,則將其包裝在'logical()'中。 – Simon

+0

@Simon:很好,趕快謝謝。我用一種稍微不同的方式解決了它(保持'double'類型的結果)。 – Amro

+0

+1:accumarray實際上是專門爲這類事情剛做,爲什麼我沒有想到的是:P –