互消息(Mutual
Information)是胸襟两个事件集合之间的相关性(mutual
dependence)。

字符串常用方法

平均互消息量定义:

capitalize()

String.capitalize() 将字符串首字母变为题写

name = 'xiaoming'

new_name = name.capitalize()

print(new_name) 

 

运行结果:
Xiaoming

统计 1

count()

String.count() 统计字符出现的次数

name = 'xiaoming'

name_num = name.count('i')

print(name_num)  # 2

 

互新闻量I(xi;yj)在共同概率空间P(XY)中的总计平均值。 平均互音讯I(X;Y)制伏了互音信量I(xi;yj)的随机性,成为一个确定的量。

center()

String.center()

#打印输出字符,让字符串放在中间
name = 'Libai'
print(name.center(50,'*'))

 

输出结果如下:

**********************Libai***********************

平均互信息量的情理意义

endswith()

String.endswith() 判断是否以指定的字符串结尾

name = 'Libai'

new_val = name.endswith('bai')
print(new_val)

 

结果为:
True

 统计 2

find()

String.find() 查找字符串在原字符串中的地点,重临所在索引值

name = 'this is test plaintext'

print(name.find('this'))
print(name.find('is'))

 

在find()方法中,同样能够采用切片。

name = 'this is test plaintext'

test_val = name[name.find('test'):12]

print(test_val)  #test

 

字符串的切片用法与列表的应用方法相同。

1) 观看者站在输出端:

format()

String.format() 输出指定的内容

user_show_name = 'hello,{name},welcome to here,do you like ,{name}'

print(user_show_name.format(name='yanyan'))

 

出口效果如下:

hello,yanyan,welcome to here,do you like ,yanyan

H(X/Y) —信道疑义度/损失熵.。Y关于X的后验不确定度。表示接到变量Y后,对自由变量X依然存在的不确定度。代表了在信道中损失的信息。

format_map()

String.format_map() 将字典中的参数传递进字符串中,输出

hello = "My name is {name},I am {age} years old.I like {hobby}"

# 使用format_map()方法来传递值
print(hello.format_map({'name':'yanyan','age':19,'hobby':'music travel'}))

 

H(X) —X的先验不确定度/无条件熵。

isalnum()

String.isalnum() 判断字符串中是否全体为数字依旧英文

test_str01 = 'helloIam19yearsold'
test_str02 = 'hello,I am 19 years old'


print(test_str01.isalnum()) # True
print(test_str02.isalnum()) # False

 

isalnum()方法判断字符串中是不是全体为数字仍旧英文,符合就重返True,不符合就回来False,要是中间包含有号子或者空格之类的特殊字符也会回到False。

I(X;Y)—收到Y前后关于X的不确定度缩短的量。从Y得到的有关X的平分信息量。

isalpha()

String.isalpha() 判断字符串中是不是全体为纯英文字符

test_str03 = 'hello I love you'
test_str04 = 'helloILoveYou'
print(test_str03.isalpha()) # False
print(test_str04.isalpha()) # True

 

 

isdigit()

String.isdigit() 判断字符串中是不是全部为整数

# isdigit() 判断是否为整数
print('123'.isdigit()) # True
print('hello'.isdigit()) # False

 

2)观望者站在输入端:

isidentifier()

String.isidentifier() 判断是不是一个官方的标识符

# isidentifier() 判断是不是一个合法的标识符
print('test'.isidentifier()) # True
print('12'.isidentifier()) # False
print('_aa'.isidentifier()) # True

 

H(Y/X)—噪声熵。表示发出随机变量X后, 对随意变量Y依旧存在的平均不确定度。假设信道中不设有其他噪声, 发送端和接收端必存在确定的照应关系, 发出X后必能确定相应的Y, 而现在无法完全确定相应的Y, 这明确是由信道噪声所引起的。

看清字符串是否全部为题写或者小写

# islower() 判断字符串是否全部是小写
print('Hello,world'.islower()) # False
# isupper() 判断字符串是否全部为大写
print('Hello,world'.isupper()) # False

 

I(Y;X) —发出X前后关于Y的先验不确定度减弱的量.

join()

sep.join(seq)
连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

# 创建一个列表
name = ['张学友','刘德华','郭富城','黎明']

print('--'.join(name))

 

出口结果如下:

张学友--刘德华--郭富城--黎明

 

ljust()

String.ljust(size,替换符号)
从前向后起初总结,当字符串的尺寸超越size时,超过部分用替换符号替代

3)观望者站在通信系统完全立场上:

rjust()

String.rjust(size,替换符号)
从后迈入开头盘算,当字符串的尺寸当先size时,超越部分用替换符号替代

H(XY)—联合熵.表示输入随机变量X, 经信道传输到达信宿, 输出随机变量Y。即收,发双方通信后,整个序列仍然存在的不确定度.

lower 将字符串大写变成小写

String.lower()

# 创建一个字符串
str = "hello,I am LiBai,I am 23 years old ,I like travel"

# lower 将字符串大写变成小写
print(str.lower())

 

I(X;Y) —通信前后整整系统不确定度缩小量。在通信前把X和Y看成四个相互独立的随机变量, 整个系统的先验不确定度为X和Y的联手熵H(X)+H(Y); 通信后把信道两端出现X和Y看成是由信道的传递总括特性联系起来的, 具有一定总结关联关系的六个随机变量, 这时整个系统的后验不确定度由H(XY)描述。

upper 将字符串小写变成大写

String.upper()

# 创建一个字符串
str = "hello,I am LiBai,I am 23 years old ,I like travel"

# 将字符串小写变成大写
print(str.upper())

 

Tip:上边的lower()方法和upper()方法改变字符串后将改变的结果回到,不过原本的字符串并不会变动。

如上二种不同的角度验证: 从一个事件得到另一个事件的平均互音信需要破除不确定度,一旦消除了不确定度,就获取了音信。

lstrip 去掉字符串左侧的空格或者回车

String.lstrip()

print('-----------')
# 创建一个字符串
str = "\nhello,I am LiBai,I am 23 years old ,I like travel"

print(str.lstrip())

 

出口结果如下:

-----------
hello,I am LiBai,I am 23 years old ,I like travel

除了lstrip 还有rstrip和 strip方法。

 

replace 替换

String.replace(old,new,count)
将字符串中的old字符替换为New字符,count为轮换的个数

str = 'hello,world,hello'

print(str.replace('hello','Hello',1))

 

出口的功能如下:
Hello,world,hello

平均互信息量的习性

split

String.split() 切割

str = 'hello,world,hello'

# 默认以空格为分割
print(str.split()) # ['hello,world,hello'] 单词之间没有空格,所以所有的内容为一个元素
# 以o为分割
print(str.split('o')) # ['hell', ',w', 'rld,hell', '']
# 以逗号分割
print(str.split(',')) # ['hello', 'world', 'hello']

 

① 对称性

splitlines() 以换行为分开

String.splitlines()

str = 'hello,\nworld,\nhello'

print(str.splitlines()) # ['hello,', 'world,', 'hello']

 

 

 

Tip:补充,python中的字符串并不同意修改值,只同意覆盖值。

状态如下:

# 创建字符串
str = 'hello,world'
print(str[0])  # h

# 尝试去修改
str[0] = 'H'
print(str)  # TypeError: 'str' object does not support item assignment


# 下面这种情况是我们常见的情况,其实是属于一种字符串之前的值被新的值覆盖掉了
str = 'Hello,YanYan'
print(str)  # Hello,YanYan

 

I(X;Y)= I(Y;X)

由Y提取到的有关X的信息量与从X中提取到的关于Y的音信量是一律的。 I(X;Y)和 I(Y;X)只是观看者的立场不同。

② 非负性

I(X;Y)≥0

平均互音信量不是从六个实际新闻出发, 而是从随机变量X和Y的完整角度出发, 并在平均意义上考察问题, 所以平均互音信量不会冒出负值。

或者说从一个轩然大波提取关于另一个轩然大波的音讯, 最坏的状态是0, 不会由于知道了一个事变,反而使另一个事变的不确定度扩充。

③ 极值性

I(X;Y)≤H(X)

I(Y;X)≤H(Y)

从一个事件提取关于另一个事变的消息量, 至多是另一个风波的熵那么多, 不会超过另一个轩然大波我所含的音信量。

当X和Y是各类对应提到时: I(X;Y)=H(X), 这时H(X/Y)=0。从一个事件可以即便得到有关另一个事变的音信, 从平均意义上的话, 代表信源的音讯量可方方面面由此信道。

当X和Y互相独顿时: H(X/Y) =H(X),
I(Y;X)=0。 从一个轩然大波不可能赢得另一个事件的其他音信,这等效于信道中断的图景。

④ 凸函数性

平均互音信量是p(xi)和p(yj
/xi)的函数,即I(X;Y)=f [p(xi),
p(yj /xi)];

若固定信道,调整信源, 则平均互信息量I(X;Y)是p(xi)的函数,即I(X;Y)=f
[p(xi)];

若固定信源,调整信道, 则平均互信息量I(X;Y)是p(yj /xi)的函数,即I(X;Y)=f [p (yj
/xi)]。

平均互消息量I(X;Y)是输入信源概率分布p(xi)的上凸函数(concave function; or
convext cap function)。

平均互音信量I(X;Y)是输入转移概率分布p(yj /xi)的下凸函数(convext function; or
convext cup function)。

⑤ 数据处理定理

串联信道

在一些其实通信系统中, 日常出现串联信道。例如微波中继接力通信就是一种串联信道.

信宿收到数额后再举办多少处理, 数据处理系列可视作一种信道, 它与眼前传输数据的信道构成串联信道。

数量处理定理:当音讯经过层层处理后,随着总括机数目标加码,输入信息与输出音讯之间的平均互音信量趋于变小。即

I(X;Z)≤I(X;Y)

I(X;Z)≤I(Y;Z)

其中倘诺Y条件下X和Z相互独立。

两级串联信道输入与出口音讯之间的平均互音信量既不会超过第Ⅰ级信道输入与输出信息之间的平均互音信量,也不会领先第Ⅱ级信道输入与输出音信之间的平分互音信量。

当对信号/数据/音信举办一体系处理时, 每处理一回, 就有可能损失一部分消息, 也就是说数据处理会把信号/数据/音讯成为更有效的款型, 可是绝不会成立出新的音讯。这就是所谓的信息不增原理。

当已用某种模式拿到Y后, 不管如何对Y举办拍卖, 所拿到的音讯不会超过I(X;Y)。每处理一回, 只会使信息量缩小, 至多不变。也就是说在任何新闻流通连串中, 最终收获的新闻量,至多是信源提供的消息。一旦在某一进程中丢掉了有的音讯, 未来的连串不管怎么样处理, 倘使不可能接触到丢失新闻的输入端, 就不可以再回复已丢失的音讯。