2014-09-28 44 views
0

我想要做的是讓Matlab生成一個從0開始的數值列表,並且一直向上直到數組的大小,並且當數值出現時它會將其轉換爲該列表的值。自動生成字典

例如:

-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000

我想這產生:

使當我輸入值-0.75時,它會將其轉換爲0等等。我看到我的老師使用了一個自動完成這個功能的Matlab函數,但不幸的是他沒有提供該函數的名稱(簡單地說它存在)。如果沒有人知道這個函數,我會寫我的,但我更喜歡Matlab開發人員寫的東西。

回答

0

x = [-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000]; 
value = -.75; 

您可以使用

find(value==x)-1 %// -1 needed because Matlab indexing starts at 1, not 0 

ismember(value, x)-1 

謹防comparing floating-point values for equality,雖然。您可能要包括公差:

tol = 1e-6; %// relative tolerance 
find(abs(value./x-1)<tol)-1 

你也可以使用一個map,雖然它似乎矯枉過正了這一點,並具有浮點比較的潛在問題:

x = [-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000]; 
y = 0:numel(x)-1; 
dict = containers.Map(x, y); 

然後dict(-.75)返回0

+0

雖然我已經實現它這樣我希望在Matlab中的一個函數自動做到這一點,謝謝y儘管如此。 – DMH 2014-09-28 16:27:21

+0

那麼,'find'和'ismember'的使用在我看來很自動。你正在調用這些函數,而不需要更多 – 2014-09-28 16:28:06

+0

也許你想要一個[map](http://www.mathworks.es/es/help/matlab/map-containers.html)。它看起來並不是最適合的選項,儘管 – 2014-09-28 16:36:19