2010-02-05 107 views
2

我在MATLAB中有兩個矩陣可以說每個大小爲1000 * 1000的arr1arr2。我想比較它們的元素和保存在結果矩陣resarr這也是1000 * 1000的比較,使得對於每個元素:MATLAB:比較兩個陣列的所有元素

  • 如果在arr1的元件是一個比arr2更大,將值1在結果
  • 如果arr2元素越大,存儲的值2

,但我不想與循環要做到這一點,因爲這是比較慢。我怎樣才能做到這一點?


編輯: 另外,如果我想不同的RGB值存儲在1000×1000×3矩陣的結果,取決於arr1arr2比較,莫非是不慢的循環呢?

例如商店(255,0,0)如果arr1較大和(0,255,0)如果arr2較大

+0

這是一個非常類似的問題到http:// stackoverflow.com/questions/2202641/how-do-i-compare-all-elements-of-two-arrays-in-matlab – Doresoom 2010-02-05 18:06:42

+2

@Doresoom:同意。 *非常相似,但技術上不同。 – gnovice 2010-02-05 18:10:40

回答

5
resarr = 2 - (arr1 > arr2) 

arr1>arr2比較ARR1和ARR2,逐個元素,返回一個包含1000×1000 1矩陣其中arr1較大,否則爲0。 2 -部分使它成爲一個矩陣,如果arr1大於arr2,則有1個,否則爲2。注意:如果arr1和arr2在某點上是euqal,那麼你也會得到2(因爲arr1> arr2返回0,然後2-0 = 2)。

+0

你能告訴我,如果我想將不同的RGB值分配給1000 * 1000 * 3結果數組,取決於arr1和arr2的比較結果,我會怎麼做? – n0ob 2010-02-05 18:28:00

+2

作爲一個評論,即使這個代碼是正確的,性能明智的注意,通過存儲1/2而不是真/假,你正在創建一個矩陣x8乘以邏輯類型的大小.. – Amro 2010-02-05 19:51:53

2

關於你的編輯,一旦你有你的resarr矩陣計算Ofri建議,您可以通過以下方式修改RGB矩陣img

N = numel(resarr); %# The number of image pixels 

index = find(resarr == 1); %# The indices where arr1 is bigger 
img(index) = 255;   %# Change the red values 
img(index+N) = 0;   %# Change the green values 
img(index+2*N) = 0;   %# Change the blue values 

index = find(resarr == 2); %# The indices where arr2 is bigger 
img(index) = 0;    %# Change the red values 
img(index+N) = 255;   %# Change the green values 
img(index+2*N) = 0;   %# Change the blue values 
+0

ty幫助了很多 – n0ob 2010-02-06 22:25:44