gpt4 book ai didi

python - 从 matlab 到 python 的代码转换

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:50 26 4
gpt4 key购买 nike

我正在将 matlab 文件转换为 python 代码。我的 matlab 文件是:

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?

最佳答案

使用 numpy 时,最好将所有数组初始化为 numpy 数组,而不是 python 数组(列表的列表),然后在执行时转换为 numpy。因此,第一步我将输入 v = np.zeros(n, N) 进行初始化。这应该可以解决你的第二个问题。

下一步是让您的代码更具可读性。删除 N+1/i-1 等。L 不需要是列表 - 仅使用当前值,因此将其更改为局部变量而不是列表。

在 matlab 中:v.*v 不是点积,而是两个数组的逐个元素相乘。此外,当您尝试计算 v 与其自身的点积时,v 不是平方的,因此它不起作用。但是,我们可以使用点积和转置来简化此步骤。

下面的代码应该有帮助。 matlab 代码中的第一个 sum 对“第一个数组维度”求和(我忘记了这是哪一个) - 因此您必须检查 v_squared_sum 是否具有相同的值两种语言的尺寸。

def curve_to_q(p):
n, N = p.shape # nargout=2
v = np.zeros((n, N))
for i in range(n):
v[i, :] = np.gradient(p[i, :], 1 / N)
v_squared_sum = v.dot(v.transpose()) # 1 x (n or N) array
len_ = np.sum(np.sqrt(v_squared_sum)) / N
v = v / len_
for i in range(N):
L = sqrt(norm(v[:, i]))
q[:, i] = v[:, i] / max(L, 0.0001)
return q, len_

关于python - 从 matlab 到 python 的代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com