我正在尝试将一段代码从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是一个空序列。 我在渐变函数的第一个循环中得到错误。 我在这里错过了什么?有什么建议吗?
答案 0 :(得分:0)
修改强>
您正尝试对标量值执行np.gradient
。这将始终返回错误。例如,尝试np.gradient(2)
,它将返回与您相同的错误。 np.gradient
函数需要数组输入。相反,如果为matlab的gradient
函数提供标量输入,则返回0
。在您的matlab代码中,您似乎只是在t
和s
矩阵中添加0以获取T
和S
矩阵。
不确定这是否能解决您的具体问题,但不要忘记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])