我在考虑从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更多 –

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

  1. matlab 保存三维矩阵,如何以Python语法读取Matlab中保存的三维矩阵(Dicom矩阵)?...

    我在Matlab中保存了一个坐标(行=288,列=288,切片(z)=266)的3D矩阵. 现在我想用Python加载它.不幸的是,加载后,在Python中它是(row=288,col=266,sli ...

  2. Python版本与Matlab版本的对应关系

    1.python版本与matlab版本的对应关系     在python中要调用matlab代码时,需要注意python版本和matlab版本的对应关系,如果python版本过高,是无法成功的调用相应 ...

  3. 数据分析:工作平台【非编程类:STATA、SPASS、MatLab】【编程类:Python、R语言】

    数据分析:工作平台[非编程类:STATA.SPASS.MatLab][编程类:Python.R语言]

  4. matlab批量储存变量_科协五分钟|用Matlab工具包处理音频信号

    科协近期大事汇总 1. 9月28日晚,硬件人才计划顺利验收. 2. 9月28日下午,仪器设计大赛综合组交流. 3. 五系联合实验室参观筹办中,预计第六第七周举办 4. 仪器设计大赛新生组开发稳步进行. ...

  5. matlab中双引号_Octave、SciLab能否替代MATLAB?

    THE START 相信小伙伴之前都看到关于哈工大MATLAB授权被取消的消息,意思就是无法进行商业化使用,如果用来发文章或其他商业用途就算侵权,关于更多小编就不多说了.其实除了MATLAB还有很多免 ...

  6. matlab错误使用assert,关于异常处理:何时在Matlab中使用assert()?

    由于Matlab被解释,通常会在执行函数签名的函数开头花费大量时间. 例如 if nargin ~= 2; error('must provide two input args a and b'); ...

  7. MOOC《Python语言程序设计》(第15次)Python计算生态概览(第九周)

    MOOC<Python语言程序设计>(第15次) Python计算生态概览(第九周)21.8.26 文章目录 MOOC<Python语言程序设计>(第15次) Python计算 ...

  8. 一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程

    一.前言   我最近在做一个基于图像融合的目标检测工程,我经常用matlab去研究和创新新型的图像融合算法,因为matlab有着python所不可比拟的数据可视化功能和大量的滤波分解框架包:在目标检测 ...

  9. MATLAB基础教程,扫盲贴,快速入门MATLAB

    MATLAB中文论坛论坛 http://www.ilovematlab.cn/thread-542310-1-1.html MATLAB最基础教程(零):基本数学概念 前言:matlab只是个软件,用 ...

最新文章

  1. Java比较数量怎么比较_java - 如何在Java数量比较字符 - SO中文参考 - www.soinside.com...
  2. 文件上传(JavaWeb 狂神笔记)
  3. MongoDB之副本集
  4. golang中的可见性
  5. mysql timestamp 差值_MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法(两个日期之间的差值)...
  6. python寻找列表最大值最小值及其下标
  7. 嵌套点击事件只执行第一次
  8. 《计算机操作系统》大作业【参考代码解读】
  9. 人生若如初见,又当如何?
  10. java房屋出租系统
  11. 用css和js分别实现三级导航菜单
  12. VFP 常用 OCX 控件 注册
  13. Mac恢复出厂模式教程(Intel 版)
  14. mysql中生成时间维度表
  15. tewa-800g请输入正确的管理员账户_tp-link路由器如何设置管理员身份绑定 路由器设置管理员身份绑定方法【介绍】...
  16. 【CSDN如何创建博客专栏?】
  17. 2021年危险化学品经营单位主要负责人找解析及危险化学品经营单位主要负责人考试技巧
  18. 解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xfd in position 1527802: illegal multibyte sequ
  19. Git Flow 之 Tag 标签
  20. 量子力学常用知识汇总 (部分)

热门文章

  1. 文件上传upload-labs靶场通关指南
  2. 五子棋的彩蛋——背景音效
  3. 使用git push推送时出现错误error: failed to push some refs to ‘https://gitee.com/yang-yimu/vue_shop.git‘
  4. visio2013 如何快速画出所有箭头
  5. JAVA将日期类型(xx年xx月xx日)转化 成字符串变量
  6. Jetson 配置中文环境,中文输入法,安装QQ
  7. 比较全的一个项目(PC端)
  8. [RK3399][Android7.1] 调试笔记 --- Audio codec时钟源从BCLK1获取
  9. JavaEE——No.2 套接字编程(TCP)
  10. Excel如何从混合数据中提取出手机号码