Matlabのdiff()をPythonで
Matlabでちょいちょい使うdiff()
これもpythonではnumpy使ってできる。
numpy.diff()
matlabでXのDim軸方向のN階の差分はdiff(X,N,Dim)で求める。
同じことは、numpy.diff(X,n=N,axis=Dim)でできる
ただし、matlabのDimは1から始まるのに対し、numpy.diffは0から始まる点に注意。
もっとも、これは配列のインデックスとかと同じ。
例:diff() in Matlab
x = reshape(0:99,[],5)';
dx = diff(x,1,1);
ddx = diff(x,2,1);
>> x
x =
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
>> dx
dx =
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
>> ddx
ddx =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
例:numpy.diff() in Python
import numpy as np
x = np.arange(100).reshape(5, -1)
dx = np.diff(x, n=1, axis=0)
ddx = np.diff(x, n=2, axis=0)
>>> print(x)
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59]
[60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
[80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]]
>>> print(dx)
[[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]]
>>> print(ddx)
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
x = reshape(0:99,[],5)';
dx = diff(x,1,1);
ddx = diff(x,2,1);
>> x
x =
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
>> dx
dx =
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
>> ddx
ddx =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
import numpy as np
x = np.arange(100).reshape(5, -1)
dx = np.diff(x, n=1, axis=0)
ddx = np.diff(x, n=2, axis=0)
>>> print(x)
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59]
[60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
[80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]]
>>> print(dx)
[[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]
[20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20]]
>>> print(ddx)
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
同じですね。
余談:列vs行
diff()の話はこれでいいのだが、
何も考えずにベクトルつくると縦だったり横だったりの挙動がMatlabとPython(numpy)で違うっぽい?
(上の例だとMatlabの方でしれっと転置している)
気が向いたら調べるかも。
Author And Source
この問題について(Matlabのdiff()をPythonで), 我々は、より多くの情報をここで見つけました https://qiita.com/HiroMiyawaki/items/e0002ef39dc8717938a3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .