模块回顾01

1.自定义模块
import
导入

import test # test是模块名
test.func() # func() 是test模块中的函数调用
模块分类
1.内置模块
标准库,python解释器自带的.py文件(模块)

2.第三方模块
各种大神写的,需要额外下载的(并发编程开始讲解)(pypi)

3.自定义模块
自己写的,不需要额外下载

导入的过程
1.当前的名称空间中开辟一个新的空间(test)

2.将模块中所有的代码执行

3.通过模块名,进行查找函数(工具)

示例
test模块
def func():
print("这是test文件下的func函数")
def foo():
print("这是test文件下的foo函数")
print(123)
print(456)
name = "这是名字"
import test
print(test.name)
print(test.func())

123

456

这是名字

这是test文件下的func函数

import test
import test
import test
import test
import test
import test
print(test.name)

123

456

这是名字

别名的使用
import test as t
print(t.name)

123

456

这是名字

兼容性
test模块
def func():
print("扳手")

meet模块
def func():
print("螺丝刀")
msg = """
1.扳手
2.螺丝刀
"""
choose = input(msg)
if choose == "1":
import test as t
elif choose == "2":
import meet as t
t.func()
import 和 from的区别
import test # 把工具箱拿过来
from test import func # 把工具拿过来
import的优缺点
优点: 不会和当前文件定义的变量或者函数发生冲突

test模块
name = "alex"
import test
name = "宝元"
print(test.name)
print(name)

alex

宝元

缺点: 占用内存比较大

from的优缺点
优点: 占用内存比较小

缺点: 会和当前文件定义的变量或者函数发生冲突

test模块
name = "alex"
name = "宝元"
from test import name
print(name)

alex 下面的变量或者函数会覆盖上面的

解决办法
test模块
name = "alex"
name = "宝元"
from test import name as n
print(name)
pirnt(n)

宝元

alex

from 模块名 import *
test模块
name = "alex"
def func():
print("这是test下的func函数")
name = "宝元"
def func():
print("123")

from test import *
print(name)
func()

alex

这是test下的func函数

注意会出现覆盖现象

内存地址
test模块
name = "alex"
def func():
print("这是test下的func函数")
def foo():
print("这是test下的foo函数")
from test import foo
print(foo)

import test
print(test.foo)
模块的用法
1.脚本(在cmd中执行 python test.py)

2.模块(不使用或者导入)

测试接口
if name == "main"
在当前模块中使用__name__就是"main"
当模块被导入的时候__name__就是被导入的模块名
路径
导入路径
import meet
print(meet.name)
使用相对路径
from day15.t1 import meet
print(meet.name)
使用绝对路径
from sys import path
path.insert(0,"D:\")
import meet
print(meet.name)
模块的查找顺序
自定义模块 > 内置模块 > 第三方

2.time
time -- 时间(内置模块)

time的方法
import time
时间戳
print(time.time())

时间戳 浮点数 可计算

print(time.time() + 5000)

睡眠
time.sleep(3)

睡眠 以秒为单位

时间节点
print(time.strftime("%Y-%m-%d %H:%M:%S"))

年-月-日 时:分:秒

2019-07-25 16:43:24

结构化时间
时间戳转结构化
print(time.gmtime()) / print(time.localtime())

time.struct_time(tm_year=2019, tm_mon=7, tm_mday=25, tm_hour=8,

tm_min=46, tm_sec=15, tm_wday=3, tm_yday=206, tm_isdst=0)

print(time.gmtime()[0]) / print(time.localtime()[0])

2019

print(time.gmtime().tm_year) / print(time.localtime().tm_year)

2019

结构化转字符串时间
print(time.strftime("%Y-%m-%d %H:%M:%S"))

字符串时间转结构化
print(time.strptime("2008-9-1 12:30:30","%Y-%m-%d %H:%M:%S"))

时间戳转换成字符串
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(156156641.46854)))

1974-12-13 08:50:41

将字符串时间转换成时间戳
print(time.mktime(time.strptime("2008-9-1 12:30:30","%Y-%m-%d %H:%M:%S")))

1220243430.0

3.datetime
datetime -- 对象

datetime的方法
from datetime import datetime

获取当前时间(浮点数)
print(datetime.now())

2019-07-25 17:24:58.037219

计算时间差距
print(datetime(2019,5,20,13,14,00) - datetime(2019,5,20,14,20,00))

-1 day, 22:54:00

将当前时间转化成时间戳
print(datetime.now().timestamp())

1564047101.042584

将时间戳转化成当前时间
print(datetime.fromtimestamp(1564047101.042584))

2019-07-25 17:31:41.042584

将对象转成字符串
print(str(datetime.now()))
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

2019-07-25 17:40:47

时间加减(datetime加减)
from datetime import datetime,timedelta
print(datetime.now() + timedelta(hours=30)) # 当前时间加30个小时

2019-07-27 00:19:38.461757

总结:
用处: 记录日志时使用

​ 计算时间

4.random
random -- 随机

random的方法
import random

0-1随机取值(浮点数)
print(random.random())

0.04233141839466259

0-10随机取值(浮点数)
print(random.uniform(1,10))

1.0434503538907838

1-3随机取值(包含1和3)
print(random.randint(1,3))

1/2/3

randrange(起始,终止,步长)(顾头不顾尾)
print(random.randrange(1,5,2))

1/3

随机选择一个元素
print(random.choice([1,2,3,4,5]))

1/2/3/4/5

随机选择两个元素(会重复)
print(random.choices([1,2,3,4,5],k=2))

从列表中随机选择两个元素(会有重复元素,比如:[1,1])

随机选择两个元素(不会重复)
print(random.sample([1,2,3,4,5],k=2))

从列表中随机选择两个元素(不会有重复元素,除非列表只有两个重复元素,比如[1,1])

顺序打乱
lst = [1,2,3,4,5,6,7,8,9,0]
random.shuffle(lst)
print(lst)

[4, 3, 9, 5, 1, 2, 8, 7, 6, 0]

随机打乱

posted on 2019-07-25 20:27  七橼77 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/-777/p/11246758.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值