2017-08-06 129 views
1

我的問題應該相當簡單,但我無法讓它工作。 我想通過使用邏輯運算符從矩陣中取得相關的行,然後只存儲這些行。 我習慣用其他語言的for循環來做到這一點,但在Matlab中,它應該更快地在整個陣列或矩陣上運行。矩陣上的Matlab邏輯操作

這是我認爲應該工作的一個例子,但是所有類似的嘗試都會產生不同的錯誤,我不知道該怎麼做。

Mrelevant = Matrix(Matrix.no_refs > 100) 

編輯:矩陣實際上是頭一個表,我想只保留滿足某些要求的行,就像在報頭「no_refs」列中的值應高於100

我希望這已經夠清楚了,謝謝!

+2

請參閱:[mcve] – excaza

+2

顯然'Matrix'不是矩陣,而是某種類型的結構。請添加代碼,以創建一個樣本「矩陣」以及您對這些數據的期望輸出。 – beaker

+0

看到這裏一個關閉的例子:https://stackoverflow.com/questions/45526311/find-the-largest-value-in-a-column/45526702#45526702 – EBH

回答

2

現在您指定的Matrixtable,答案很清楚。你忘了一個額外的colon指標參數包括對於給定的行中的所有變量您選擇:

Mrelevant = Matrix(Matrix.no_refs > 100, :); 

這會給你一個新表Mrelevant僅包括從Matrix那些行,其中no_refs變量大於100。有關按行和/或變量訪問table中的數據的所有方法,請參見here

0

您在此處顯示的語法應該可行,但我不知道no_refs的用途可能是什麼。正確的語法是:

Mrelevant = matrixName(matrixName > 100) 

但是,這將創建一個包含符合條件的值的列。例如,

testMatrix = 
0.8147 0.0975 0.1576 0.1419 0.6557 
0.9058 0.2785 0.9706 0.4218 0.0357 
0.1270 0.5469 0.9572 0.9157 0.8491 
0.9134 0.9575 0.4854 0.7922 0.9340 
0.6324 0.9649 0.8003 0.9595 0.6787 

relevant = testMatrix(testMatrix > .5) 

relevant = 
0.8147 
0.9058 
0.9134 
0.6324 
0.5469 
0.9575 
0.9649 
0.9706 
0.9572 
0.8003 
0.9157 
0.7922 
0.9595 
0.6557 
0.8491 
0.9340 
0.6787 

但是,當你說

只能通過邏輯運算符,然後存儲 這些行

相關行做你的意思是隻存儲行的所有元素在排中滿足條件?在這種情況下,語法將

relevant = testMatrix 
% Delete all rows that don't meet the requirement 
relevant(any(relevant<=100, 2),:) = []; 

這將簡單地擦除包含不符合您的要求值的所有行。

+0

我越來越_Matrix索引超出範圍刪除。 _任何線索爲什麼會是這種情況? –

+0

可能是因爲特定的矩陣未正確形成。如果您可以將您的命令行或腳本發佈到發生錯誤的位置,我可以幫助進一步調試它。 –