Python的矩阵运算主要依赖numpy包,scipy包以numpy为基础,大大扩展了后者的运算能力。numpy包含两种基本的数据类型:数组和矩阵。
首先我们来看几个基本的函数:
1. zeros(): 可以用来构造全零矩阵
import numpy as np
a=np.zeros(3)
print(a)
>>>[ 0. 0. 0.]
a1=np.zeros((3,3))
print(a1)
>>>[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
2. ones(): 可以用来构造全1矩阵
import numpy as np
b=np.ones((3,3))
print(b)
>>>[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
3. eye(): 可以用来构造单位矩阵
import numpy as np
c=np.eye((3))
print(c)
>>>[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
4. random模块用于生成随机数,包含以下常用函数:
(1)numpy.random.random:生成一个[0,1)之间的随机浮点数或N维浮点数组
import numpy as np
print(np.random.random(3))
>>>[ 0.50010769 0.15948497 0.55937365]
print(np.random.random((3,3)))
>>>[[ 0.63889841 0.02418554 0.43296293]
[ 0.69861965 0.29944022 0.87427738]
[ 0.73962426 0.16554107 0.12540919]]
(2)numpy.random.randn:生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数
print(np.random.randn(3))
>>>[-1.30652514 1.26862292 0.60176302]
print(np.random.randn(3,3))
>>>[[ 0.44491667 -0.55012703 0.69292673]
[-0.01358685 0.8027923 1.8637794 ]
[ 0.06430576 0.12436816 0.25944719]]
(3)numpy.random.standard_normal(size=None):生产一个浮点数或N维浮点数组,取数范围:标准正态分布随机样本
print(np.random.standard_normal(3))
print(np.random.standard_normal((3,3)))
(4)numpy.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
#生成一个[1,3]之间随机整数
print(np.random.random_integers(3))
#生成一个[3,6]之间随机整数
print(np.random.random_integers(3,6))
#生成一个元素个数为5的一维整数数组,数值介于[1,3]
print(np.random.random_integers(3,size=5))
>>>[3 3 3 2 3]
#生成一个2x3数组,取数范围:[1,3]随机整数
print(np.random.random_integers(3,size=(2,3)))
>>>[[3 1 3]
[3 2 3]]
#生成一个2x3数组,取数范围:[2,6]随机整数
print(np.random.random_integers(2,6,(2,3)))
>>>[[5 6 6]
[4 5 4]]
(5) numpy.random.random_sample(size=None):生成一个[0,1)之间随机浮点数或N维浮点数组。
np.random.random_sample()#生成一个[0,1)之间随机浮点数
#size=2
print(np.random.random_sample(2))#生成size=2的一维数组
# size为整数元组
print(np.random.random_sample((2,))) #等同np.random.
# np.random.random_sample((,2))#报错
print(np.random.random_sample((2,3))) #生成2x3数组
>>>[[ 0.42552357 0.50329469 0.56103096]
[ 0.25368185 0.97693338 0.67921633]]
print(np.random.random_sample((3,2,2))) #3x2x2数组
>>>[[[ 0.10746936 0.13039599]
[ 0.09554242 0.80825212]]
[[ 0.23991246 0.79760361]
[ 0.52653443 0.33626639]]
[[ 0.63551107 0.10317109]
[ 0.19795662 0.71114241]]]
(6)numpy.random.choice(a, size=None, replace=True, p=None):从序列中获取元素,若a为整数,元素取值为np.range(a)中随机数;若a为数组,取值为a数组元素中随机元素。
print(np.random.choice(2))#生成一个range(2)中的随机数
>>>1
#生成一个size=2一维数组,取数范围:range(2)
print(np.random.choice(2,2))
>>>[1 1]
#生成一个2x3数组,取数范围:range(5)
print(np.random.choice(5,(2,3)))
>>>[[3 3 0]
[4 3 1]]
#生成一个np.array(['a','b','c','f']中随机元素
print(np.random.choice(np.array(['a','b','c','f'])))
>>>a
print(np.random.choice(np.array(['a','b','c','f']),(2,3)))#生成2x3数组
>>>[['b' 'f' 'f']
['a' 'c' 'f']]
#生成的始终是4,只有位置4上为true
np.random.choice(5,p=[0,0,0,0,1])
#生成shape=3的一维数组,元素取值为1或2的随机数,只有位置1,2上为true
np.random.choice(5,3,p=[0,0.5,0.5,0,0])
>>>[2 2 1]