Matlab diff(F,var,n)vs Python numpy diff(a,n = 1,axis = -1)

时间:2016-09-09 11:01:56

标签: python matlab numpy scipy

我正在尝试在python中计算matlab函数。

y = diff(x,1,2)

x是和灰度图像

我尝试了numpy diff功能,但我得到了不同的答案

请帮助

2 个答案:

答案 0 :(得分:1)

这里有两个问题。

首先,您在np.diff中交换了参数的顺序。 MATLAB和Python使用相同的参数顺序。 Python支持命名参数,因此通常最好使用参数名来避免这类问题。

其次,python索引从0开始,而MATLAB索引从1开始。这也适用于轴,因此MATLAB的轴2是Python的轴1

因此,Python中正确的函数调用是np.diff(fimg, 1, 1),但np.diff(fimg, axis=1)是更好的IMO。

MATLAB:

>> a = reshape(1:100, 10, [])'

a =

     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   100

>> diff(a,1, 2)

ans =

     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1

的Python:

>>> a = np.arange(100).reshape(10, -1)
>>> print(a)
[[ 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(np.diff(a, axis=1))
[[1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1]]

答案 1 :(得分:0)

在您的问题的评论中,您似乎将参数交换为diff函数。但是,文档说明在matlab和numpy中,参数的顺序是:

  • 阵列

  • 名词

  • 尺寸