【python基础学习】Numpy库
Numpy库
我们这里下载1.26.1这个版本
pip install numpy ==1.26.1
1.调用Numpy自带的数学工具函数
import numpy as np
print (np.sin(1))
print (np.abs(-1))
这里还有很多工具函数就不一一列举了 感兴趣可以到源码里面浏览一下
注:Ctrl + 鼠标左键:点进去看源码
退回到上一页:直接按 Alt + ←(键盘左方向键)
前进回去:Alt + →(右方向键)
直接点编辑器左上角 ← 箭头,和浏览器后退一样
快捷键:Ctrl + Alt + ← 也能返回
2.普通列表转数组
import numpy as np
# 创建原始列表
list1 = [1, 2, 3, 4, 5]
print(list1)
# 转换为NumPy数组
v= np.array(list1)
print(v)
3.数组的基本属性
a=v.shape #查询数组的形状
b=v.ndim #查询数组的维度
c=v.size #查询数组中数据的个数
a=v.shape #查询数组的形状
b=v.ndim #查询数组的维度
c=v.size #查询数组中数据的个数
print(type(v))
以下是这个一维数组调试结果

list1:这是一个普通 Python 列表,里面有 5 个元素 [1,2,3,4,5]
v:这是一个 Numpy 数组(ndarray)
(5,) 表示它是一维数组,长度为 5,后面的属性都是它的专属信息
然后是数组 v 的最小值和最大值
类型是 int32(32位整数),值分别是 1 和 5
shape 是一个元组(tuple),用来描述数组的维度和长度
(5,) 表示这是一个一维数组(元组里只有一个数字),长度是 5(有 5 个元素),元组的第 0 位是 5,所以 0 = {int} 5;元组长度 __len__ 是 1,代表 1 维
dtype:数组的数据类型
dtype 表示数组里元素的类型,这里是 int32(32位整数),说明 v 里的 1~5 都是以 32 位整数形式存储的,你也可以改成 float32、float64 等类型
size:数组元素总数
size 表示数组里所有元素的总个数,这里一维数组长度是 5,所以 size=5,如果是 3行 35列的数组,size 会是 15
二维数组调试结果可以对比看看

4.数组的升降维度
数组升维
升维度就是给数组增加一个新的轴(维度)
一维数组 (5,) → 变成二维 (1,5) 或 (5,1)
二维数组 (2,3) → 变成三维 (1,2,3)
reshape()方法
可以将数组调整为指定大小,返回原数组的一个新视图,不修改原数组。
新形状的元素总数必须与原数组相同,否则报错。
当某一维为-1时,Numpy会自动计算该维度大小。
import numpy as np
a = np.array([1,2,3,4,5,6])
print(a) # (6,)
# 一维(6,) → 二维(2,3)
b = a.reshape(2, 3)
print(b) # (2, 3)
# 升三维
c = a.reshape(1, 2, 3)
print(c) # (1, 2, 3)
#-1代表任意
d=a.reshape(3,-1)
print(d)
输出结果

a.resize(数组方法,原地操作)
原地修改数组的形状和大小,没有返回值(返回 None)。
b=a.resize(2,3)
print(b)
print(a)

np.resize(NumPy 函数)
返回一个新数组,不修改原数组,新形状可以任意指定。如果元素总数不匹配,会重复原数组的值来填充新数组(若新形状更大),若更小则截断。
b=np.resize(a,(3,3))
print(b)

数组降维
reshape 降维
reshape 可以把任意维度降到任意维度,但要元素总数不变
import numpy as np
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
v = v.reshape(2,2,2)
print(v)
v.ndim
# 将三维降到二维
r1 = v.reshape(1,8)
print(r1)
r1.ndim
ravel () 降维
ravel 将数组展平为一维,返回的是原始数组的视图,因此对返回的一维数组所做的修改可能会影响原始的多维数组。这是因为ravel只是改变了数组的形状和步长,而没有复制数据。
r2 = v.ravel()
print(r2)
flatten () 降维
flatten 将数组展平为一维,返回数组副本,修改不会影响原数组。
r3 = v.flatten()
print(r3)
修改 shape 属性降维
直接修改 shape 属性可以原地对数组进行降维或形状改变,直接作用于原数组。
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
print(v)
# 直接修改 shape 属性,实现降维/变形
v.shape = (2,4)
print(v)
输出结果

5.创建特殊的数组
np.zeros(shape):创建全0数组
np.ones(shape):创建全1数组
np.full(shape, fill_value):创建指定形状、全部填充为同一个值的数组
np.eye(n):创建n阶单位矩阵
np.arange(start, end, step):创建指定范围的有序数组(左闭右开)
np.linspace(start, end, nums):创建指定数量的等间隔数组(左右闭区间)
import numpy as np
#创建全为0的数组
a = np.zeros(5)
b = np.zeros((2,2))#(2,2)np.zeros((2,2))#zeros只能接受1个参数,
c = np.zeros((3,2,2))
print(a,'\n',b,'\n',c)
#创建全为1的数组
d = np.ones(5)
e = np.ones((2,2))
f = np.ones((2,2,2))
print(d,'\n',e,'\n',f)
#创建全为2的数组 矩阵中全部填充指定的数据
g = np.full((2,2,2), 5)
print(g)
#小补充
h = np.eye(5,7)
print('hello')
i=np.arange(1,9,3)
j=np.linspace(0,1,21)
print(i)
print(j)
输出结果

6.数组元素的选取与修改
import numpy as np
array1 = np.arange(48).reshape(2,4,6)
print(array1)
#选取某个元素
#首先确定选取哪一个二维数组
a = array1[1,0,0]
#选取某行元素
b = array1[0,1,:]
#选取某些行元素
c = array1[0,1:3,:]
d = array1[0,[1,3],:]
#选取某列
e = array1[1,:,1]
#选取某些列
f = array1[1,:,1:4]
g = array1[1,:,[1,4]]
#修改
array1[1,0,0]=100
print(array1)
v = np.array([array1,array1,array1,array1])
a= v[2,1,2: ,1:3]
print(a)
7.numpy内数组的切割和组合
import numpy as np
array1 = np.arange(16).reshape(4,4)
print(array1)
#水平切割
a = np.hsplit(array1,2)#其中第2个参数 2表示将矩阵array1进行2等份切分
b = np.split(array1,2,axis=1)
#垂直切割
c = np.vsplit(array1,2)#
d = np.split(array1,2,axis=0)
#强制切割
#水平切割
e = np.array_split(array1,3,axis=1)
#垂直切割
f = np.array_split(array1,3,axis=0)
np.hsplit(arr, n):水平切割为n等份(需保证列数能被n整除)
np.vsplit(arr, n):垂直切割为n等份(需保证行数能被n整除)
np.split(arr, n, axis):通用切割函数,axis=1水平切割,axis=0垂直切割
np.array_split(arr, n, axis):强制切割(无需保证能整除,最后一份可能数量不同)
水平切割 (H):按列切,左右分开,比如把 (3,4) 切成 (3,2) 和 (3,2)
垂直切割 (V):按行切,上下分开,比如把 (4,3) 切成 (2,3) 和 (2,3)
对应Numpy里的两个核心函数:
np.hsplit():水平切割(Horizontal Split)
np.vsplit():垂直切割(Vertical Split)
import numpy as np
#生成基数组
array1 = np.arange(9).reshape(3,3)
array2 = 2*array1
print(array1)
print(array2)
#水平组合
a3 = np.hstack((array1,array2))
a4 = np.hstack((array2,array1))
a5 = np.hstack((array1,array2,array1))
a6 = np.concatenate((array1,array2),axis=1)#连接
#axis表示连接的方向
#垂直组合
a7 = np.vstack((array2,array1))
a8 = np.concatenate((array1,array2),axis=0)
print(1)
8.数组的计算
import numpy as np
#生成两个基数组
a = np.arange(4).reshape(2,2)
b = a.copy()
#矩阵的运算
#加减乘除(求逆)
#加减 ->对应元素加减
#矩阵的乘法【点乘】
#a * b
a1 = a.dot(b)
a2 = np.dot(a,b)
#矩阵求逆
"""
inv():
并不是所有的矩阵都有逆;
即使你没有逆,给你一个逆【伪逆】
"""
a3 = np.linalg.inv(a)
a4 = a.dot([[-1.5, 0.5],
[ 1. , 0. ]])
print(a4)
9.文件读写
读取文本文件
numpy.loadtxt():从文本文件中加载数据。这个函数假定文件中的每一行都有相同数量的值,并将这些值分隔开。
你可以使用 delimiter 参数指定分隔符,如逗号、制表符等。例如:
import numpy as np
data = np.loadtxt('datingTestSet2.txt', delimiter='\t')
print(data)

保存数组到txt文件中
import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 创建一个 NumPy 数组
np.savetxt('array.txt', array)# 使用 savetxt() 将数组保存到文本文件中

更多推荐
所有评论(0)