我正在将matlab文件转换为python代码。我的MATLAB文件是:从matlab到python的代码转换
function [q,len] = curve_to_q(p)
[n,N] = size(p);
for i = 1:n
v(i,:) = gradient(p(i,:),1/(N));
end
len = sum(sqrt(sum(v.*v)))/N;
v = v/len;
for i = 1:N
L(i) = sqrt(norm(v(:,i)));
if L(i) > 0.0001
q(:,i) = v(:,i)/L(i);
else
q(:,i) = v(:,i)*0.0001;
end
end
转换的代码是:
from __future__ import division
import numpy as np
from scipy.io import loadmat,savemat
import os
def curve_to_q(p):
n, N = p.shape # nargout=2
for i in range(1, (n +1)):
v[(i -1), :] = np.gradient(p[(i -1), :], 1/(N))
len_ = np.sum(np.sqrt(np.sum(v.np.dot(v))))/N
v = v/len_
for i in range(1, (N +1)):
L[(i -1)] = sqrt(norm(v[:, (i -1)]))
if L[(i -1)] > 0.0001:
q[:, (i -1)] = v[:, (i -1)]/L[(i -1)]
else:
q[:, (i -1)] = v[:, (i -1)] * 0.0001
return q, len_
但是,似乎有问题
len_ = np.sum(np.sqrt(np.sum(v.np.dot(v))))/N
和
L[(i -1)] = sqrt(norm(v[:, (i -1)]))
我怎样才能让它适当转换为Python?
有什么样的问题? – ShinTakezou
首先,您不要在'curve_to_q'中的任何位置定义初始化'v',这可能会导致问题。 'L'一样。如果'v'是一个数组,你应该使用'*',而不是'np.dot',如果'v'是一个矩阵,你应该使用'np.multiply'(因为你需要'。*',这是元素乘法,而不是矩阵乘法)。 – senshin
@ShinTakezou:我无法理解,np.sum(v.np.dot(v)))如何在python中工作? – sam