c语言比matlab慢很多,为什么我的Python脚本与Matlab相比速度太慢?

我在考虑从Matlab切换到Python(NumPy)。所以,作为一个学习任务,我试图在Python上重写一个简单的随机模型。 python脚本返回正确的答案,但工作太慢! Python需要3分钟,而Matlab需要3秒钟。我究竟做错了什么?为什么我的Python脚本与Matlab相比速度太慢?

Matlab的:

clear all; clc;

tic

T = 0.05;

Tmax = 3600;

t = T:T:Tmax;

N = length(t);

G = [0 0;

0 T];

F = [1 T;

0 1];

Dksi = 13*1;

Deta = 10*1;

Band = 0.1:0.1:3;

RMS_Omega = nan(1, length(Band));

for i = 1:length(Band)

K = nan(2, 1);

K(1) = 8/3 * Band(i) * T;

K(2) = 32/9 * Band(i)^2 * T;

ksi = sqrt(Dksi) * randn(1, N);

eta = sqrt(Deta) * randn(1, N);

Xest = [0; 0];

Xextr = F*Xest;

Xist = [0; 0];

ErrOmega = nan(1, N); Omega = nan(1, N);

for k = 1:N

Xist = F*Xist + G*[0; ksi(k)];

omega_meas = Xist(1) + eta(k);

Xest = Xextr + K*(omega_meas - Xextr(1));

Xextr = F*Xest;

ErrOmega(k) = Xest(1) - Xist(1);

Omega(k) = Xist(1);

end

RMS_Omega(i) = sqrt(mean(ErrOmega.^2));

end

figure(1)

hold on

plot(Band, RMS_Omega);

hold off

xlabel('Bandwidth, Hz'); ylabel('RMS \omega, Hz');

toc

的Python:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import math

import numpy as np

import matplotlib as mpl

import matplotlib.pyplot as plt

import time as time

tbeg = time.time()

T = 0.005

Tmax = 3600.0

t = np.linspace(T, Tmax, int(Tmax/T))

N = len(t)

G = np.array([[0, 0],

[0, T]])

F = np.array([[1, T],

[0, 1]])

Dksi = 13.0

Deta = 10.0

Band = np.linspace(0.1, 3.0, 30)

Band_for_plot = 2

RMS_Omega = np.array([None for i in range(0, len(Band))])

for i, BW in enumerate(Band):

K = np.array([[8/3 * BW * T],

[32/9 * BW*BW *T]])

ksi = math.sqrt(Dksi) * np.random.randn(N)

eta = math.sqrt(Deta) * np.random.randn(N)

Xest = np.array([[0],

[0]])

Xextr = F.dot(Xest)

Xist = np.array([[0],

[0]])

ErrOmega = np.array([None for j in range(0, N)])

Omega = np.array([None for j in range(0, N)])

for k in range(0, N):

Xist = F.dot(Xist) + G.dot(np.array([[0],

[ksi[k]]]))

omega_meas = Xist[0] + eta[k]

Xest = Xextr + K * (omega_meas - Xextr[0])

Xextr = F.dot(Xest)

ErrOmega[k] = Xest[0] - Xist[0]

Omega[k] = Xist[0]

RMS_Omega[i] = math.sqrt(np.mean(ErrOmega**2))

elapsed = time.time() - tbeg

print(elapsed, u'sec')

+6

剖析你的python脚本会告诉你瓶颈。 –

+6

你有巨大的本地python循环。那些会比较慢(比较)。 Numpy不是魔术般的尘埃,只会加速你的代码,如果你将它加入矢量化的话。 –

+0

是的2大规模的正常蟒蛇循环,这可能是你慢的地方,使用numpy更多 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值