【问题标题】:Matlab diff(F,var,n) vs Python numpy diff(a, n=1, axis=-1)Matlab diff(F,var,n)与 Python numpy diff(a,n=1,axis=-1)
【发布时间】:2016-09-09 11:01:55
【问题描述】:

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

y = diff(x,1,2)

x是和灰度图像

我尝试了 numpy diff 函数,但我得到了不同的答案

请帮忙

【问题讨论】:

  • 请提供一些附加信息。如何在 MATLAB 中调用 diff?您使用的是哪种图像(也许也可以发布)?答案与您的预期有何不同?
  • Matlab: fimg = single(gstreet2); xdif_img = diff(fimg,1,2); Python; fimg=fimg.astype('float32'); xdif_img=np.diff(fimg,2,1)

标签: python matlab numpy scipy


【解决方案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]]

【讨论】:

    【解决方案2】:

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

    • 数组

    • n

    • 维度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 2015-08-13
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多