第二章 NumPy数值计算基础
2.1掌握Numpy数组对象ndarray
2.1.1创建数组对象
2.数组创建
import numpy as np
arr1=np.array([1,2,3,4])
print(arr1)
arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr2)
print(arr2.shape)
print(arr2.dtype)
print(arr2.size)
arr2.shape=4,3
print(arr2)
np.arange(0,1,0.2)
np.linspace(0,1,12)
np.logspace(0,1,12)
np.zeros((2,3))
np.eye(3)
np.diag((1,2,3,4))
np.ones((2,3))
np.float64(43)
np.int8(23.0)
np.bool(0)
np.float(False)
2.1.2生成随机数
np.random.random(10)
np.random.rand(2,3)
np.random.randn(10,5)
np.random.randint(2,10,size=[2,3])
2.1.3 通过索引访问一维数据
1.一维数组的索引
arr=np.arange(10)
print(arr)
arr[6]
arr[1:5]
rr[:5]
arr[3:4]=101
arr[1:-1:2]
arr[-1:1:-2]
2.多维数组的索引
arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr[1,2:4]
arr[[(0,1),(2,3)]]
arr[1:,(1,2,3)]
2.1.4改变数组形态
arr=np.arange(12)
arr.shape
arr.reshape(3,4)
arr.reshape(3,4).ndim
arr.ravel()
arr=np.arange(16).reshape(2,8)
arr.flatten()
arr.flatten('F')
arr=np.arange(12).reshape(3,4)
arr2=arr*3
np.hstack((arr,arr2))
np.vstack((arr,arr2))
np.concatenate((arr,arr2),axis=1)
np.concatenate((arr,arr2),axis=0)
arr=np.arange(12).reshape(3,4)
np.hsplit(arr,2)
np.vsplit(arr,3)
np.split(arr,2,axis=1)
2.2 掌握Numpy矩阵与通用函数
2.2.1创建NumPy矩阵
import numpy as np
matrl=np.mat("1 2 3;4 5 6;7 8 9")
matr2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
arr1=np.eye(3)
arr2=arr1*3
np.bmat("arr1 arr2;arr1 arr2")
arr1+arr2
arr1-arr2
arr1*arr2
np.multiply(arr1,arr2)
arr1.T
arr.H
arr.I
arr.A
2.2.2掌握ufunc函数
1.常用的ufunc函数运算
x=np.array([1,2,3])
y=np.array([4,5,6])
print(x+y)
x-y
x*y
x/y
x**y
x<y
np.all(x==y)
np.any(x==y)
2.ufunc函数的广播机制
arr1=np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
arr2=np.array([1,2,3])
arr1+arr2
arr2=np.array([1,2,3,4]).reshape((4,1))
arr1+arr2
2.3 利用NumPy进行统计分析
2.3.1读/写文件
import numpy as np
arr=np.arange(100).reshape(10,10)
np.save("./Python数据分析与应用/save_arr",arr)
import numpy as np
arr1=np.array([[1,2,3],[4,5,6]])
arr2=np.arange(0,1,0.1)
np.savez('./tmp/save_arr',arr1,arr2)
loaded_data=np.load("./tmp/save_arr.npy")
loaded_data=np.load("./tmp/save_arr.npz")
loaded_data['arr_0']
loaded_data['arr_1']
arr=np.arange(0,12,0.5).reshape(4,-1)
arr
np.savetxt("./tmp/arr.txt",arr,fmt="%d",delimiter=",")
loaded_data=np.loadtxt("./tmp/arr.txt",delimiter=",")
print(loaded_data)
load_data=np.genfromtxt("./tmp/arr.txt",delimiter=",")
print(load_data)
2.3.2使用函数进行简单的统计分析
1、排序
np.random.seed(42)
arr=np.random.randint(1,10,size=10)
print(arr)
arr.sort()
arr=np.random.randint(1,10,size=(3,3))
arr.sort(axis=1)
arr.sort(axis=0)
arr=np.array([2,3,6,8,0,7])
print(arr)
a=np.array([3,2,6,4,5])
b=np.array([50,30,40,20,10])
c=np.array([400,300,600,100,200])
d=np.lexsort((a,b,c))
print(list(zip(a[d],b[d],c[d])))
2、去重与重复数据
names=np.array(['小明','小黄','小花','小兰','小明'])
print(names)
print(np.unique(names))
ints=np.array([1,2,3,4,4,5,6,6,7,8,8,9,10])
print(ints)
print(np.unique(ints))
arr=np.arange(5)
print(arr)
print(np.tile(arr,3))
np.random.seed(42)
arr=np.random.randint(0,10,size=(3,3))
print(arr)
arr.repeat(2,axis=0)
arr.repeat(2,axis=1)
3、常用的统计函数
arr=np.arange(20).reshape(4,5)
print(arr)
np.sum(arr)
arr.sum(axis=0)
arr.sum(axis=1)
np.mean(arr)
arr.mean(axis=0)
np.std(arr)
np.var(arr)
np.min(arr)
np.argmin(arr)
np.argmax(arr)
arr=np.arange(2,10)
print(arr)
np.cumsum(arr)
np.cumprod(arr)
2.3.3任务实现
任务:读取iris数据集中花萼长度数据,并对其进行统计分析
iris_sepal_length=np.loadtxt("C:/Users/ljy15/Python数据分析与应用/Python数据分析与应用数据/第2章/任务程序/data/iris_sepal_length.csv",delimiter=",")
print(iris_sepal_length)
iris_sepal_length.sort()
import numpy as np
print(np.unique(iris_sepal_length))
np.sum(iris_sepal_length)
np.cumsum(iris_sepal_length)
np.mean(iris_sepal_length)
np.std(iris_sepal_length)
np.var(iris_sepal_length)
np.min(iris_sepal_length)
np.max(iris_sepal_length)
实训
1、创建数组并进行运算
arr=np.arange(0,1,0.01)
arr1=np.random.randn(10,10)
arr1
arr2=np.arange(10)
print(arr2)
arr3=np.arange(1,20,2)
print(arr3)
arr2+arr3
arr2-arr3
arr2*arr3
arr2/arr3
np.sum(arr2)
np.mean(arr2)
np.std(arr2)
np.var(arr2)
arr2.sum(axis=0)
arr2.mean(axis=0)
np.min(arr2)
np.max(arr2)
np.argmin(arr2)
np.argmax(arr2)
np.cumsum(arr2)
np.cumprod(arr2)
2、创建一个国际象棋的棋盘
import numpy as np
arr = np.zeros((8,8),dtype='int32')
arr[0:7:2, 0:7:2] = 1
arr[1:8:2, 1:8:2] = 1
print(arr)
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
if arr[i,j] == 0:
print('□', end=" ")
else:
print("■", end=" ")
print('')