第二章、变量和简单数据类型

2.1.1、Integral类型

  • 分为int和bool
  • 二进制用0b引导,八进制用0o引导,十六进制用0x引导
print(0o1011)#521
print(0b1011)#11
print(0x1011)#4113
  • 用于整数的操作符与函数
语法描述
x//y用x除以y,舍弃小数部分,使得结果为整数
x**y计算x的y次幂,等同于pow()
abs(x)返回x的绝对值
divmod(x,y)以(m,n)的形式返回x除以y的商和余数
pow(x,y)计算x的y次幂
pow(x,y,z)计算x的y次幂再除以z所得的余数( x**y)%z
round(x,n)返回浮点数x四舍五入后得到的相应整数,如果n给定,则将浮点数转换为小数点后有n位的数
  • 整数转换函数
语法描述
bin(i)返回整数i的二进制(字符串)
hex(i)返回i的十六进制(字符串)
int(x)将对象转换为整数,若为浮点数就截取整数部分
int(s,base)将字符串转换为十进制整数,base为字符串的进制
oct(i)返回i的八进制(字符串)
print(bin(5))#0b101
print(int('12',16))#‘12’为16进制,结果为18
print(int('0xa',16))#‘a’为16进制,结果为10
  • 整数位逻辑操作符
语法描述
ij
i&j进行位逻辑AND运算
i<<j将i左移j位,但不带溢出检查
~i按位取反
i^j进行位逻辑XOR运算

2.1.2、复数

z=-89.5+2.125j
>>>z.real,z.imag#-89.5 2.125

2.2、变量

  • 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为 message_1 ,但不能将其命名为 1_message 。
  • 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名 greeting_message 可行,但变量名 greeting message 会引发错误。
  • 不要将 Python 关键字和函数名用作变量名,即不要使用 Python 保留用于特殊用途的单词,如 print (请参见附录 A.4 )。
  • 变量名应既简短又具有描述性。例如, name 比 n 好, student_name 比 s_n 好, name_length 比 length_of_persons_name 好。
  • 慎用小写字母 l 和大写字母 O ,因为它们可能被人错看成数字 1 和 0 。

2.3、字符串

  • 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号

2.3.1、upper()、lower()、title()-修改字符串的大小写

name1 = " Ada "
name2 = "lovelace "
name=name1+name2
print(name.upper())#全部大写 ADA LOVELACE 
print(name.lower())#全部小写 ada lovelace 
print(name.title())#首字母大写 Ada Lovelace 

2.3.2、join()拼接字符串

first_name = "ada"
last_name = "lovelace"
full_name = first_name + " " + last_name
print(full_name)#ada lovelace
  • 另一种拼接的方法是s.join(seq),将字符串列表seq中的每一项拼接起来并用s字符串隔开
    一般用"".join(seq)
s=("tete","mama","kbkb")
print("s".join(s))#tetesmamaskbkb

2.3.3、\t制表符 \n换行

print("ada\tmoe")#ada	moe

2.3.4、rstrip()删除尾部空白lstrip()删除头部空白strip()删除空白

name1 = " Ada "
name2 = "lovelace "
name=name1+name2
print(name1.rstrip()+name2)#去除尾部空白 Adalovelace 
print(name1.lstrip()+name2)#去除头部空白Ada lovelace 
print(name1.strip()+name2)#去除空白Adalovelace 
  • 这种删除空白的效果只是暂时的,要想永久的删除空白就得将删除后的结果存回变量中
name = name.rstrip()

2.3.5、原始字符串(用于正则表达式)

  • 在引号中,有些转义字符需要表达会很麻烦
转义字符含义
\newline忽略换行
\反斜杠\
单引号
"双引号
\b退格
\n换行
\r回车
\t制表符
  • 原始字符串在引号前面使用r来引导,在这串字符中所有字符都按照字面意思理解
print(r"\t\n")#\t\n

2.3.6、长字符串的表达

t="teteteteteteteyeyeyeyeeyeyeyeyeyeyey"+\
"mcmcmcm"
s=("tetetetetete"
"mememe")

2.3.7、str()将数字转换为字符串

age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)

2.3.8、字符串分片与步距

  • 字符串的索引位置从0开始,直至字符串长度值减去1
  • 可以从最后一位向前索引,依次是-1,-2
    在这里插入图片描述
  • 一共有三种分片操作方式如下所示,其中seq可以为任意序列,包括列表、字符串和元组。startendstep必须为整数
  • 第一种方式表示从序列中提取第start项的数据项
  • 第二种表示表示从序列中提取第start项(包括)到end(不包括)结束的数据项
  • 第三种与第二种类似。如果start忽略并且step为负,那么默认start为-1
  • seq[::-1]将seq反转
seq[start]
seq[start:end]
seq[start:end:step]
  • 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、付费专栏及课程。

余额充值