2017-01-19 20 views
0

條件的指標我有3個巨大的數組:Array1Array2Array3。所有的尺寸都相同,尺寸爲7000000x1發現多個陣列滿足在MATLAB

我試圖找到滿足在Matlab使用find命令的共同條件的陣列的指數,我像這樣使用

I2 = find (Array1 > a1 & Array1 < a2 & ... 
      Array2 > b1 & Array2 < b2 & ... 
      Array3 > c1 & Array3 < c2); 

a,b和c全部包含標量值。

I2是在for循環內(〜7M迭代)和該操作花費大量時間!有關改進這一行代碼的任何建議?

+0

這是極有可能的快,因爲它會得到更多。有沒有什麼特別的理由需要'發現'而不是僅僅讓一個邏輯陣列出來? – Suever

+0

我認爲找到是這樣做的簡單方法。你能解釋一下讓邏輯陣列出來的意思嗎? – Mechanician

+1

那麼你怎麼後來與'I2'呢?你用它來從別的東西中獲取價值嗎?如果是這樣的話,你可以省略'find',並且只使用語句其餘部分返回的邏輯數組來爲你建立索引 – Suever

回答

0

這可能更快,使用邏輯索引不find

% Set up array of indices 
I = 1:numel(Array1); 

% Logical indexing the same as your Find function 
I2 = I2(Array1 > a1 & Array1 < a2 & ... 
     Array2 > b1 & Array2 < b2 & ... 
     Array3 > c1 & Array3 < c3); 

I2現在包含符合標準的指數。

你說你會使用這個喜歡

Array5 = Array4(I2) 

如果這是唯一的使用,可以完全跳過I2創建和使用用於創建相同的邏輯索引,像這樣

Array5 = Array4(Array1 > a1 & Array1 < a2 & ... 
       Array2 > b1 & Array2 < b2 & ... 
       Array3 > c1 & Array3 < c3);