我有一個問題,似乎很簡單,但也許我錯過了一些東西。讓我們說我有:vector = [10:1:19];
。我有另一個矢量,want = [11 16 19];
我只想要一種命令將返回給我的方式,其中11,16和19發生在向量中的痕跡。換句話說,我想返回2,7和10.什麼命令可以做到這一點?我不能使用find
,(因爲尺寸不匹配),那麼還有其他方法嗎?在MATLAB中查找矢量中的特定事件,而不是for-loop?
實際上,vector
和want
的長度會很長,所以for循環不會。
我有一個問題,似乎很簡單,但也許我錯過了一些東西。讓我們說我有:vector = [10:1:19];
。我有另一個矢量,want = [11 16 19];
我只想要一種命令將返回給我的方式,其中11,16和19發生在向量中的痕跡。換句話說,我想返回2,7和10.什麼命令可以做到這一點?我不能使用find
,(因爲尺寸不匹配),那麼還有其他方法嗎?在MATLAB中查找矢量中的特定事件,而不是for-loop?
實際上,vector
和want
的長度會很長,所以for循環不會。
使用intersect
:
[C, i_vector, i_want] = intersect(vector, want)
C是在兩種載體中的公共元素。 i_vector
將是vector
和i_want
中的常用集合索引,是want
向量中的匹配集合索引。
或者,您可以使用ismember
。
要獲得vector
目前的元素want
:
vector(ismember(vector,want))
ans =
11 16 19
得到他們的指標:
find(ismember(vector,want))
ans =
2 7 10
或者只是:
[tf, loc] = ismember(vector,want)
tf =
0 1 0 0 0 0 1 0 0 1
loc =
0 1 0 0 0 0 2 0 0 3
其中TF指示的每個元素vector
是否存在於want
和loc
表示want
中的相應索引。
謝謝!我對此毫無頭緒。 MATLAB如何使這個命令運行得非常快btw?引擎蓋下發生了什麼?當然沒有for循環的權利? – Spacey
@Learnaholic結構良好的循環可以非常快。 MatLab也爲矩陣進行了優化。 – KronoS
@Learnaholic:還有許多Matlab內置函數都經過了優化和預編譯,如果我沒有弄錯,有時會導致更多的速度。 – pm89