numpy(Numerical Python)
numpy提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。
numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
python之numpy的基本使用
记得 import numpy 噢
创建ndarray数组:
data2 = [[1,2,3],[4,5,6]]
y = numpy.array(data2)
print(y)
print(y.dtype) #打印数组的数据类型
print(y.ndim) #打印数组的维度
print(y.shape) #打印数组各个维度的长度,注意y.shape是一个元组
>>>
[[1 2 3]
[4 5 6]]
int64
2
(2, 3)
创建数组:
1.使用zeros, ones, empty来创建数组:
zeros创建元素全为0的数组
ones创建元素全为1的数组
empty创建没有元素的数组
x=numpy.zeros(5)
print(x)
x=numpy.zeros((2,3))
print(x)
>>>
[0. 0. 0. 0. 0.]
[[0. 0. 0.]
[0. 0. 0.]]
2.使用arange生成连续元素
x=numpy.arange(6)
print(x)
x=numpy.arange(0,6,2)
print(x)
>>>
[0 1 2 3 4 5]
[0 2 4]
3.指定ndarray数组元素的类型:
常用类型: int64,float64
x=numpy.array([1.0,3.2,4.5],dtype=numpy.float64)
print(x)
print(x.dtype)
>>>
[1. 3.2 4.5]
float64
4.使用astype复制数组,并转化类型
x=numpy.array([1.0,3.2,4.5],dtype=numpy.float64)
y=x.astype(numpy.int64)
print (y)
>>>
[1 3 4]
5.将字符串元素转换为数值元素:
x=numpy.array(['1','2','3'],dtype=numpy.string_)
y=x.astype(numpy.int64) #若转换失败经常会报错
print(y)
>>>
[1,2,3]
6.使用其他数组的数据类型作为参数:
x = numpy.array([ 1., 2.6,3. ],dtype = numpy.float32);
y = numpy.arange(3,dtype=numpy.int32);
print (y)
print (y.astype(x.dtype)) #就在这一步
[0 1 2]
[ 0. 1. 2.]
7.ndarray的矢量化计算:
矢量运算:相同大小的数组键间的运算应用在元素上
矢量和标量运算:“广播”— 将标量“广播”到各个元素
x=numpy.array([1,2,3])
y=numpy.array([2,1,4])
print(x*2)
print(x>2)
print(x+y)
print(x>y)
>>>
[2 4 6]
[False False True]
[3 3 7]
[False True False]
8.ndarray数组的基本索引和切片:
索引实例一
x=numpy.array(([1,2,3],[4,5,6]))
print(x[0][1])
y=x[0]
print(y)
>>>
2
[1 2 3]
索引实例二:
array1 = np.arange(0,12).reshape((3,4))
print(array1)
print(array1[1][2])
print(array1[1,2])
print(array1[0,0:2])
print(array1[2])
array2 = array1.flatten() #展开array为一行
print(array2)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
6
6
[0 1]
[ 8 9 10 11]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
注意: :右端是开区间
一维数组的切片:
x=numpy.array([1,2,3,4,5])
print(x[1:3])
print(x[0:3])
print(x[:3])
print(x[2:])
print(x[::2])
>>>
[2 3]
[1 2 3]
[1 2 3]
[3 4 5]
[1 3 5]
二维数组的切片:
x=numpy.array(([1,2,3],[4,5,6]))
print(x[:2,:2])
a=x[:2,:2]
print(a[0][1])
>>>
[[1 2]
[4 5]]
x=numpy.array([[0,2],[0,4],[5,6]])
x[:2,:1] = [[8],[6]] # 用数组赋值
print (x)
>>>
[[8,2],[6,4],[5,6]]
对array进行分割
1.使用np.linspace进行均等分割
a = np.arange(12).reshape((3,4))
print(a)
# 均等分割
b = np.linspace(1,10,15)
print(b)
c = np.linspace(1,10,12).reshape((3,4))
print(c)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ 1. 1.64285714 2.28571429 2.92857143 3.57142857 4.21428571
4.85714286 5.5 6.14285714 6.78571429 7.42857143 8.07142857
8.71428571 9.35714286 10. ]
[[ 1. 1.81818182 2.63636364 3.45454545]
[ 4.27272727 5.09090909 5.90909091 6.72727273]
[ 7.54545455 8.36363636 9.18181818 10. ]]
2. 使用 np.split 进行分割
A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A,2,axis=1)) #纵向分割
print(np.split(A,3,axis=0)) #横向分割
print(np.array_split(A,3,axis=1)) #不等量分割
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
矩阵运算
实例一
m1 = np.array([[1,2],[1,1]])
m2 = np.array([[2,2],[1,1]])
m3 = np.dot(m1,m2) #矩阵相乘
# 或者可以是 m3 = m1.dot(m2)
print(m3)
>>>
[[4 4]
[3 3]]
实例二
A = np.arange(2, 14).reshape((3, 4))
print(A)
print(np.argmin(A)) # 0 求矩阵中最小元素和最大元素的索引
print(np.argmax(A)) # 11
print(A.mean()) # 7.5
print(A.T)
>>>
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
7.5
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
实例三:
A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B))) #上下合并 vertical stack
print(np.hstack((A,B))) #左右合并 horizontal stack
print(A[np.newaxis,:]) #array转矩阵
print(A[:,np.newaxis]) #array转成转置矩阵
#print(A.T) #并没有用
#注意区分如何初始化一个array或者是一个矩阵
M1 = np.array([1,1,1])[:,np.newaxis]
M2 = np.array([2,2,2])[:,np.newaxis]
print(M1)
print(np.concatenate((M1,M2),axis = 0))
print(np.concatenate((M1,M2,M1),axis = 1)) #多个矩阵进行合并
>>>
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
[[1 1 1]]
[[1]
[1]
[1]]
[[1]
[1]
[1]]
[[1]
[1]
[1]
[2]
[2]
[2]]
[[1 2 1]
[1 2 1]
[1 2 1]]
随机数的生成
randomArray = np.random.random((2,4))
print(randomArray)
print(randomArray.sum())
print(randomArray.min())
print(randomArray.min(axis=0)) #在行(第零维)里面找最小值
print(randomArray.min(axis=1)) #在列(第一维)里面找最小值
>>>
[[0.48227689 0.99524129 0.7384621 0.3943273 ]
[0.49772793 0.73632905 0.57824485 0.19307704]]
4.615686449183402
0.19307704083522803
[0.48227689 0.73632905 0.57824485 0.19307704]
[0.3943273 0.19307704]