Python之numpy学习

Python之numpy库学习

前言

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。
本文将numpy常用的基本功能以最简单的Demo展示出来,学习编程理论很重要,但亲自去一点点的敲出代码更重要,如果能够理解下面这些例子,那么numpy应该用着很顺手了。

Demo目录

一、numpy属性
二、array创建
三、numpy矩阵运算1
四、numpy随机数生成以及矩阵运算2
五、numpy的索引
六、array合并
七、array分割
八、numpy的浅拷贝和深拷贝

一、numpy属性

import numpy as np

array = np.array([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]])  # 最外面两侧[]是二维矩阵,同理最外面三层[]是三维矩阵;最外面一层[]是一维矩阵(即向量)
print(array)
print(array.ndim)  # 矩阵维度
print(array.shape)  # 矩阵形状(行列数)
print(array.size)  # 矩阵大小(元素个数)
print(array.dtype)  # 元素类型

二、array创建

import numpy as np

a = np.array([1, 2, 3], dtype=np.int32)  # 创建元素数据类型(dtype-data type)为整形的一维矩阵
print(a.dtype)
b = np.array([1, 2, 3], dtype=np.float)  # 创建元素数据类型(dtype-data type)为浮点型的一维矩阵
print(b.dtype)
c = np.array([1, 2, 3])  # 创建一维数据
print(c)
d = np.array([[1, 2, 3], [4, 5, 6]])  # 创建二维矩阵
print(d)
zero = np.zeros((2, 3))  # 生成2行3列元素全为0的矩阵
print(zero)
one = np.ones((3, 4))  # 生成3行4列元素全为1的矩阵
print(one)
empty = np.empty((2, 3))  # 生成2行3列元素全部接近于0(但不等于0)的矩阵
print(empty)
e = np.arange(10)  # 生成从0到9的一维数据
print(e)
f = np.arange(3, 10)  # 生成从3到9的一维数据
print(f)
g = np.arange(3, 10, 3)  # 生成从3到9间隔为3的一维数据
print(g)
h = np.reshape(e, (2, 5))  # 改变矩阵的形状
print(h)
i = np.arange(8).reshape(4, 2)  # 改变矩阵形状
print(i)

三、numpy矩阵运算1

import numpy as np
arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])
arr2 = np.array([[1, 1, 2],
                 [2, 3, 3]])

print(arr1)
print(arr2)

print(arr1 + arr2)  # 矩阵加法运算 (按位相加)
print(arr1 - arr2)  # 矩阵减法运算 (按位相减)
print(arr1 * arr2)  # 矩阵乘法运算 (按位相乘)
print(arr1 ** arr2)  # 矩阵幂运算 (arr1元素为底数,对应的arr2元素为幂)
print(arr1 / arr2)  # 矩阵除法运算 (按位相除)
print(arr1 % arr2)  # 矩阵取余运算 (按位取余)
print(arr1 // arr2)  # 矩阵取整运算 (按位取整)

print(arr1 + 2)  # 所有的元素加2
print(arr1 * 10)  # 所有的元素乘10

arr3 = arr1 > 3  # 元素大小判断
print(arr3)

print(arr1)
arr4 = np.ones((3, 5))
print(arr4)

print(np.dot(arr1, arr4))  # 矩阵乘法(矩阵运算法则)
print(arr1.dot(arr4))  # 矩阵乘法(矩阵运算法则)

print(arr1)
print(arr1.T)  # 矩阵转置
print(np.transpose(arr1))  # 矩阵转置


四、numpy随机数生成以及矩阵运算2

import numpy as np

sample1 = np.random.random((3, 2))  # 生成3行2列从0到1的随机数
print(sample1)
sample2 = np.random.normal(size=(3, 2))  # 生成3行2列符合标准正态分布的随机数
print(sample2)
sample3 = np.random.randint(0, 10, size=(3, 2))  # 生成3行2列从0到10的随机整数
print(sample3)
print(np.sum(sample1))  # 求和(将矩阵中所有元素相加 )
print(np.min(sample1))  # 求最小值(获取矩阵中所有元素最小值 )
print(np.max(sample1))  # 求最大值(获取矩阵中所有元素最大值 )

print(sample1)
print(np.sum(sample1, axis=0))  # 对列求和
print(np.sum(sample1, axis=1))  # 对行求和

print(np.argmin(sample1))  # 求矩阵中元素最小值的索引
print(np.argmax(sample1))  # 求矩阵中元素最大值的索引

print(np.mean(sample1))  # 求矩阵中元素的平均值
print(sample1.mean())  # 求矩阵中元素的平均值
print(np.median(sample1))  # 求矩阵元素的中位数
print(sample1)
print(np.sqrt(sample1))  # 求矩阵元素的开方
sample4 = np.random.randint(0, 10, size=(1, 10))
print(sample4)
print(np.sort(sample4))  # 排序(从小到大)
print(np.sort(sample1))  # 对每行元素从小到大排序
print(np.clip(sample4, 2, 8))  # 将矩阵中元素小于2的全部变为2,大于8的全部变为8,其它不变


五、numpy的索引

import numpy as np

arr1 = np.arange(2, 14)
print(arr1)
print(arr1[2])  # 提取第2个位置(位置从0开始计)的数据
print(arr1[1:4])  # 提取从第1到第4个位置(不包括第4个位置)数据
print(arr1[1:-1])  # 提取从第1个位置到倒数第1个位置(不包括倒数第一个位置)的数据
print(arr1[:5])  # 提取前5个数据
print(arr1[-2:])  # 提取后2个数据

arr2 = arr1.reshape((3, 4))
print(arr2)
print(arr2[1])  # 提取矩阵(二维数组)中第1行(从0开始计)的数据
print(arr2[1][1])  # 提取矩阵(二维数组)中第1行第1列(从0开始计)的数据
print(arr2[1, 1])  # 提取矩阵(二维数组)中第1行第1列(从0开始计)的数据
print(arr2[:, 2])  # 提取所有行中的第2列数据

for i in arr2:  # 迭代行
    print(i)
for i in arr2.T:  # 迭代列
    print(i)

for i in arr2.flat:  # 迭代每个元素
    print(i)

六、array合并

import numpy as np

arr1 = np.array([1, 2, 3])
print(arr1)
arr2 = np.array([4, 5, 6])
print(arr2)
arr3 = np.vstack((arr1, arr2))  # 垂直合并矩阵
print(arr3)
print(arr3.shape)
arr4 = np.hstack((arr1, arr2))  # 水平合并
print(arr4)
print(arr4.shape)

print(np.concatenate((arr1, arr2)))  # 合并数据

print(arr3)
arr5 = np.concatenate((arr3, arr3), axis=0)  # 垂直合并(合并矩阵的形状要相似)
print(arr5)

arr5 = np.concatenate((arr3, arr3), axis=1)  # 水平合并
print(arr5)

print(arr1.T)  # 测试发现一维数据不能转置
print(arr1.shape)

arr1_1 = arr1[np.newaxis, :]  # 在行的位置给一维数据添加一个维度,使其转为二维数据
print(arr1_1)
print(arr1_1.shape)
print(arr1_1.T)  # 此时可以转置了
arr1_2 = arr1[:, np.newaxis]  # 在列的位置给一维数据添加一个维度,使其转为二维数据
print(arr1_2)
print(arr1_2.shape)
arr1_3 = np.atleast_2d(arr1)  # 如果arr1的维度小于2维,则将其转为2维数据
print(arr1_3)
print(arr1_3.T)

七、array分割

import numpy as np

arr1 = np.arange(12).reshape((3, 4))
print(arr1)

arr2, arr3 = np.split(arr1, 2, axis=1)  # 水平方向分割,分为2份
print(arr2)
print(arr3)

arr4, arr5, arr6 = np.split(arr1, 3, axis=0)  # 垂直方向分割,分为3份
print(arr4)
print(arr5)
print(arr6)

arr4, arr5, arr6 = np.array_split(arr1, 3, axis=1)  # 水平方向分割,分为3份,不等分割
print(arr4)
print(arr5)
print(arr6)

arr4, arr5, arr6 = np.vsplit(arr1, 3)  # 垂直方向分割,分为3份
print(arr4)
print(arr5)
print(arr6)

arr4, arr5 = np.hsplit(arr1, 2)  # 水平方向分割,分为2份
print(arr4)
print(arr5)

八、numpy的浅拷贝和深拷贝

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = arr1  # 浅拷贝(arr2与arr1共享一块内存,arr2和arr1的改变相互影响)
arr2[0] = 6
print(arr1)
print(arr2)

arr3 = arr1.copy()  # 深拷贝(arr2与arr1各自拥有独立的内存,arr2和arr1的改变没有直接联系)
arr3[0] = 8
print(arr1)
print(arr3)

你可能感兴趣的:(Python,Python,numpy,机器学习)