2016-09-15 2 views
0

私はdiff(A)を使いたいが、今度はベクトルの要素間の比率を探している。Matlabのベクトルの隣接する要素の比率

私の好きな機能を探しています
A = [1, 2, 3, 4, 5]; 
diff(A) = 1, 1, 1, 1 

Aのみ正の要素が含まれている場合は、このソリューションは多次元配列上で動作

ratio(A) = 2, 1.5, 1.3333, 1.25 
+0

diff()も使います:-) –

+2

'diff()'関数を使うと決めたら、この 'sign(A(1:end-1))。* sign(A 2:end))。* exp(diff(log(abs(A)))) '長いです。 – mehmet

答えて

7

単純なインデックス作成で何が問題になりますか?チェーンexpdiff、次にlogはオーバーヘッドがかなり重いようです。単に第2位置から分子アクセス要素を有する端部および分割要素単位の第二の最後の位置に最初の位置から分母によって:

ratio = A(2:end) ./ A(1:end-1); 

出力例

>> A = [1 2 3 4 5] 

A = 

    1  2  3  4  5 

>> ratio = A(2:end) ./ A(1:end-1); 
>> ratio 

ratio = 

    2.0000 1.5000 1.3333 1.2500 

上記は、正の値と負の値の両方にも適用されます。

+0

これは単にOPのニーズを満たすため+1です。 – mehmet

+1

マイナス1のための 'diff': - P –

5

exp(diff(log(abs(A)))) 
ans = 2, 1.5, 1.3333, 1.25 
0

あなたが要素の上に常にループすることができますA

for i = 2:length(A) 
    ratio(i-1) = A(i)/A(i-1) ; 
end 

正の値または負の値で動作します。

関連する問題