我有一張圖片,我只剪出一列。之後,我把它變成了邏輯,所以在這一列中只有0和1。如何計算矩陣中的1和0的數量?
假設我在此列中的值是
1111000110000000000000011111111
我要算那些每塊1或0的每個塊的長度。
其結果將是
1 - 4 (first 1)
0 - 3 (first 0)
1 - 2
and so on...
我只知道算整個列,但我不能爲每個不同的塊做。任何人都請幫助我。
我有一張圖片,我只剪出一列。之後,我把它變成了邏輯,所以在這一列中只有0和1。如何計算矩陣中的1和0的數量?
假設我在此列中的值是
1111000110000000000000011111111
我要算那些每塊1或0的每個塊的長度。
其結果將是
1 - 4 (first 1)
0 - 3 (first 0)
1 - 2
and so on...
我只知道算整個列,但我不能爲每個不同的塊做。任何人都請幫助我。
讓vec
是零和一的行矢量(1逐n
),那麼你可以使用下面的代碼
rl = (find(vec ~= [vec(2:end), vec(end)+1]));
data = vec(rl);
rl(2:end) = rl(2:end) - rl(1:end-1);
rl
會給你連續的零和一的數量,而data
會告訴你每個塊是零還是一個。
此問題與run length coding密切相關。
演示:
vec = [1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1];
rl = (find(vec ~= [vec(2:end), vec(end)+1]));
data = vec(rl),
rl(2:end) = rl(2:end) - rl(1:end-1),
data =
1 0 1 0 1
rl =
4 3 2 14 8
謝謝。我已經嘗試過,但是我得到了一個錯誤。是因爲我的vec是n-1而不是n-1?錯誤是「使用horzcat CAT參數維度不一致的錯誤。」 –
如果你的向量是'n'-by-1,你可以簡單地使用'vec = vec'來轉置它。';' – Shai
是的,這正是我想要的。但是我可以問你嗎?如果我只看rl,那麼我怎麼知道每一個都是1或0?任何想法? –
@Shai該如何[標籤:矢量]標籤與此有關? –
@EitanT - 解決方案是通過矢量化,而不是循環 – Shai
@Shai但問題不在於矢量化_se se _...我認爲這個標籤應該保留用於專門針對向量化代碼實現的問題。如果你的答案恰好是矢量化的,這很好,但是這不應該成爲重複的原因。這裏的大多數MATLAB問題的答案都可以是矢量化的,但這並不意味着它們都應該在這個標籤下。 –