在matlab中获取np.gradient的python代码转换错误

时间:2017-04-16 15:38:38

标签: python matlab numpy matrix

我正在尝试将一段代码从matlab转换为涉及(500x500)2D矩阵的梯度函数的python。 't'和's'是具有一些值的2D矩阵。 'T'和'S'分别是具有零和np.zeros的2D矩阵。 row,col是相同的值整数,在我的情况下是127。

for i in range(1, row):
    for j in range(2, col):
        T[i][j] = t[i][j - 1] + np.gradient(t[i][j - 1])
        S[i][j] = s[i][j - 1] + np.gradient(s[i][j - 1])

我生成的Python代码是:

{{1}}

但是这种转换会产生错误

  

渐变   如果max(轴)> = N或min(轴)< 0:   ValueError:max()arg是一个空序列。   我在渐变函数的第一个循环中得到错误。   我在这里错过了什么?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

修改

您正尝试对标量值执行np.gradient。这将始终返回错误。例如,尝试np.gradient(2),它将返回与您相同的错误。 np.gradient函数需要数组输入。相反,如果为matlab的gradient函数提供标量输入,则返回0。在您的matlab代码中,您似乎只是在ts矩阵中添加0以获取TS矩阵。

不确定这是否能解决您的具体问题,但不要忘记python以index = 0开头,而matlab以index = 1开头。尝试:

for i in range(0, row):
    for j in range(1, col):
        T[i][j] = t[i][j - 1] + np.gradient(t[i][j - 1])
        S[i][j] = s[i][j - 1] + np.gradient(s[i][j - 1])