Numpy用法
1.创建ndarry数组
import numpy as np
data1 = [1,3,5,7.8]
w1 = np.array(data1)
print(w1)
data2=(2,4,6,8)
w2=np.array(data2)
print(w2)
data3=[[1,2,3,4],[5,6,7,8]]
w3=np.array(data3)
print(w3)
[1. 3. 5. 7.8]
[2 4 6 8]
[[1 2 3 4]
[5 6 7 8]]
2.专门创建数组的函数
(1)arange
warry=np.arange(10)
print(warry)
[0 1 2 3 4 5 6 7 8 9]
warry=np.arange(0,1,0.2) #数组元素为从0到1,间隔为0.2
print(warry)
[0. 0.2 0.4 0.6 0.8]
(2)linspace(最后一个参数指示数组的个数)
warry=np.linspace(0,1,5) #数组中是5个元素,范围是从0到1
print(warry)
[0. 0.25 0.5 0.75 1. ]
(3)logspace(产生的是等比数列)
warry=np.logspace(0,1,5)
print(warry)
[ 1. 1.77827941 3.16227766 5.62341325 10. ]
(4)zeros创建指定长度或形状的全0数组
print(np.zeros(4))
print(np.zeros([4,4]))
[0. 0. 0. 0.]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(5)diag 创建对角矩阵
print(np.diag([1,2,3,4]))
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
(6)eye创建对角线为1,其他位置为0的矩阵
print(np.eye(3))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
3.ndarray对象属性和数据转换
(1)查看数组的属性
warry = np.array([[1,2,3,4],[5,6,7,8]])
print(warry.shape) #查看维度
print(warry.ndim) #查看秩
print(warry.size) #查看元素个数
print(warry.dtype) #查看数据类型
print(warry.itemsize) #查看每个元素的字节大小
warry.shape=4,2 #改变数组的shape
print(warry)
(2, 4)
2
8
int32
4
[[1 2]
[3 4]
[5 6]
[7 8]]
(2)数据类型转换
arr1 = np.arange(6)
print(arr1.dtype)
arr2 = arr1.astype(np.float64)
print(arr2.dtype)
int32
float64
4.生成随机数
arr = np.random.randint(100,200,size = (2,4))
print(arr)
[[153 142 102 147]
[153 185 175 115]]
关于产生随机数的函数:
binomial:产生二项分布的随机数
normal :产生正态分布的随机数
uniform:产生在[0,1)中均匀分布的随机数
5.数组变换
(1)数组重塑
改变数组维度:
arr1= np.arange(8)
print(arr1)
arr2=arr1.reshape(4,2)
print(arr2)
[0 1 2 3 4 5 6 7]
[[0 1]
[2 3]
[4 5]
[6 7]]
reshape的一个参数可以设置为-1,表示数组的长度可以通过数据本身来判断
arr1= np.arange(12)
print(arr1)
arr2=arr1.reshape(2,-1)
print(arr2)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
与reshape相反作用的是ravel和flatten
arr1=np.arange(12).reshape(4,3)
print(arr1)
arr2=arr1.ravel()
print(arr2)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
(2)数组合并
横向合并
arr1=np.arange(6).reshape(3,2)
print(arr1)
arr2=arr1*2
print(arr2)
arr3=np.hstack((arr1,arr2))
print(arr3)
[[0 1]
[2 3]
[4 5]]
[[ 0 2]
[ 4 6]
[ 8 10]]
[[ 0 1 0 2]
[ 2 3 4 6]
[ 4 5 8 10]]
纵向合并
arr1=np.arange(6).reshape(3,2)
print(arr1)
arr2=arr1*2
print(arr2)
arr3=np.vstack((arr1,arr2))
print(arr3)
[[0 1]
[2 3]
[4 5]]
[[ 0 2]
[ 4 6]
[ 8 10]]
[[ 0 1]
[ 2 3]
[ 4 5]
[ 0 2]
[ 4 6]
[ 8 10]]
concatenate函数当其参数axis=1时进行横向合并,axis=0时进行纵向合并
arr1=np.arange(6).reshape(3,2)
print(arr1)
arr2=arr1*2
print(arr2)
arr3=np.concatenate((arr1,arr2),axis=1)
print(arr3)
arr3=np.concatenate((arr1,arr2),axis=0)
print(arr3)
[[0 1]
[2 3]
[4 5]]
[[ 0 2]
[ 4 6]
[ 8 10]]
[[ 0 1 0 2]
[ 2 3 4 6]
[ 4 5 8 10]]
[[ 0 1]
[ 2 3]
[ 4 5]
[ 0 2]
[ 4 6]
[ 8 10]]
(3)数组分割
arr=np.arange(16).reshape(4,4)
print(arr)
print(np.hsplit(arr,2))
print(np.vsplit(arr,2))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
(4)数组转置和轴对换
转置
arr=np.arange(6).reshape(3,2)
print(arr)
print(arr.transpose((1,0)))
[[0 1]
[2 3]
[4 5]]
[[0 2 4]
[1 3 5]]
轴对换
arr=np.arange(6).reshape(3,2)
print(arr)
print(arr.swapaxes(0,1))
[[0 1]
[2 3]
[4 5]]
[[0 2 4]
[1 3 5]]
6.统计分析
(1)排序
arr=np.array([7,0,41,6,2,9,1,12,3,8,4])
print(arr)
arr.sort()
print(arr)
[ 7 0 41 6 2 9 1 12 3 8 4]
[ 0 1 2 3 4 6 7 8 9 12 41]
(2)去重
name=np.array(['红色','蓝色','黄色','白色','红色'])
print(name)
print(np.unique(name))
['红色' '蓝色' '黄色' '白色' '红色']
['白色' '红色' '蓝色' '黄色']
(3)常用统计函数
mean,sum,min,max,std等