2014-10-31 11 views
1

我有一個13行和1189列的數組。每列都有一個範圍值,其中大部分都有負數,但~100沒有任何負值。我能找到的負值的第一次出現有:查找第一個否定的發生或用標誌替換,如果所有值在數組列正值

[I,J] = find(A<0) 
[~,m] = unique(J,'first') 
T = I(m)' 

,但我想念那個只有正數列。最後,我需要一個數組,它具有與輸入數組相同數量的列,其中第一次出現負值的索引或只有正值的列的標誌(零很好)。下面是該陣列的一個示例:

A = [0.3449 0.3299 -0.0431 -0.0391 -0.0391 -0.0441 -0.0511 -0.0611 -0.0701 -0.0711 -0.0591 
0.3187 0.2947 -0.0353 -0.0283 -0.0243 -0.0243 -0.0273 -0.0313 -0.0363 -0.0363 -0.0313 
0.2784 0.2614 -0.2046 -0.1926 -0.1786 -0.1616 -0.1466 -0.1416 -0.1456 -0.1486 -0.1436 
0.1732 0.1682 -0.2358 -0.2208 -0.2018 -0.1798 -0.1608 -0.1488 -0.1458 -0.1468 -0.1468 
0.1530 0.1380 -0.2130 -0.1860 -0.1590 -0.1340 -0.1120 -0.0970 -0.0870 -0.0840 -0.0870 
0.1287 0.1067 -0.1143 -0.0853 -0.0663 -0.0563 -0.0493 -0.0403 -0.0273 -0.0163 -0.0133 
0.0955 0.0705 -0.0605 -0.0365 -0.0235 -0.0225 -0.0225 -0.0165 -0.0015 0.0145 0.0225 
0.2334 0.2084 0.1394 0.1554 0.1614 0.1584 0.1554 0.1614 0.1764 0.1944 0.2054 
0.1819 0.1589 0.1099 0.1159 0.1169 0.1129 0.1089 0.1129 0.1239 0.1379 0.1479 
0.1334 0.1114 0.0734 0.0704 0.0624 0.0504 0.0414 0.0434 0.0564 0.0744 0.0894 
0.1209 0.1059 0.0629 0.0509 0.0369 0.0219 0.0109 0.0109 0.0219 0.0379 0.0529 
0.1264 0.1124 0.0604 0.0414 0.0214 0.0014 -0.0116 -0.0116 0.0014 0.0204 0.0364 
0.0989 0.0879 0.0449 0.0269 0.0079 -0.0111 -0.0231 -0.0241 -0.0141 0.0019 0.0169]; 

對於此輸入數組A輸出數組T應該是:

T = [0 0 1 1 1 1 1 1 1 1 1] 

任何建議?

回答

2

My fav

[I,J] = find(A<0); 
T = accumarray(J,I,[size(A,2) 1],@min,0).' 

它說,對於同一列索引的每個分組在第一行的索引。通過指定輸出大小,它將自動用零填充缺失的行元素。零是默認的,但我已指定的完整性

但與您目前的解決方案,具有零的初始化T,其次是T(J(m)) = I(m)將做的伎倆。

1

佛這樣的工作,我喜歡使用max(雙輸出版本):

[V, T] = max(A<0, [], 1); 
T(~V) = 0; %// this "0" is the flag value. Change if needed 
相關問題