Я преобразовываю файл 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
Во-первых, вы не определяете инициализацию 'v' в любом месте' curve_to_q', что может вызвать проблемы. То же самое для 'L'. Если 'v' является массивом, вы должны использовать' * ', а не' np.dot', а если 'v' - это матрица, вы должны использовать' np.multiply' (потому что вы хотите '. *', который является элементарным умножением, а не матричным умножением). – senshin
@ShinTakezou: Я не могу понять, как np.sum (v.np.dot (v))) будет работать в python? – sam