Python--numpy基础知识
一. 数组的降维
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()
r2 = v.ravel()
print(r2)# flatten()
r3 = v.flatten()#非常重要,flatten方法返回的是原数组的副本,对返回的一维数组修改不影响原始多维数组;ravel方法(如果可能)返回原始数组视图,修改可能影响原始多维数组
print(r3)list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
print(v)
# 小补充shape也可以实现降维
v.shape = (2,4)#通过直接对array数据的属性进行修改
print(v)
二.创建特殊的数组
import numpy as np# 创建全为0的数组
a = np.zeros(5)
b = np.zeros((2,2))#zeros 接受形状参数,这里(2,2)表示二维 2x2 全 0 数组
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))# 创建全为指定值(这里是5)的数组,矩阵中全部填充指定的数据
g = np.full((2,2,2), 5)# 小补充,创建单位矩阵相关(np.eye 创建对角线为1,其余为0的矩阵,这里 5 行 7 列 )
h = np.eye(5,7)
print('hello')
三. numpy 中常用的两个函数
import numpy as np# 1. arange(start, end, step) -> 类似 range(start, end, step),[左闭右开区间]一次性产生规律的数据
r1 = np.arange(0,9,3)
print(r1)# 2. linspace(start, end, nums) ,[左右都是闭区间],生成 nums 个在 start 到 end 间等距的数据
r2 = np.linspace(0,1,21)
print(r2)
四.一维数组元素的选取与修改
import numpy as nparray1 = np.arange(1,9,1)
print(array1)# 选取某个元素
a = array1[1]# 选取某些元素
b = array1[[1,3,5]]# 切片(左闭右开)
c = array1[0:6]
print(a,b,c)# 修改某个元素
print(array1)
array1[0] = 10# 批量修改某些元素
array1[[1,3,5]] = 20
print(array1)array1[0:6] = 100
print(array1)
五.二维数组元素的选取与修改
import numpy as nparray1 = np.arange(24).reshape(4,6)#创建 4 行 6 列二维数组
print(array1)# 选取某个元素,第 2 行第 5 列(索引从 0 开始 )
a = array1[1,4]# 选取某行元素,第 4 行所有列
b = array1[3,:] # 选取某些行,连续行(0 到 2 行 )
c = array1[0:2,:]
# 选取某些行,不连续行(0 和 2 行 )
d = array1[[0,2],:]# 选取某列,第 4 列所有行
e = array1[:,3]# 选取某些列,连续列(0 到 3 列 )
f = array1[:,0:3]
# 选取某些列,不连续列(0 和 3 列 )
g = array1[:,[0,3]]
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)# 修改元素
# 修改某个元素,第 2 行第 5 列改为 100
array1[1,4] = 100
print(array1)# 修改某行元素,第 4 行所有列改为 100
array1[3,:] = 100
print(array1)# 修改某些行元素,0 和 2 行所有列改为 50
array1[[0,2],:] = 50
print(array1)
六.三维数组元素的选取与修改
import numpy as nparray1 = np.arange(48).reshape(2,4,6)#创建 2 个 4 行 6 列的三维数组
print(array1)# 选取某个元素,第 2 个二维数组(索引 1 )里第 1 行(索引 0 )第 1 列(索引 0 )
a = array1[1,0,0]# 选取某行元素,第 1 个二维数组(索引 0 )里第 2 行(索引 1 )所有列
b = array1[0,1,:]# 选取某些行元素,连续行(第 1 个二维数组里 1 到 3 行 )
c = array1[0,1:3,:]
# 选取某些行元素,不连续行(第 1 个二维数组里 1 和 3 行 )
d = array1[0,[1,3],:]# 选取某列,第 2 个二维数组(索引 1 )里所有行的第 2 列(索引 1 )
e = array1[1,:,1]# 选取某些列,连续列(第 2 个二维数组里所有行的 1 到 4 列 )
f = array1[1,:,1:4]
# 选取某些列,不连续列(第 2 个二维数组里所有行的 1 和 4 列 )
g = array1[1,:,[1,4]]# 修改元素,第 2 个二维数组里第 1 行第 1 列改为 100
array1[1,0,0] = 100
print(array1)v = np.array([array1,array1,array1,array1])
a= v[2,1,2: ,1:3]
print(a)
七.数组的组合
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))# concatenate 连接,axis=0 表示按行方向(垂直方向?这里原注释描述可能有误,axis=0 实际是垂直堆叠,axis=1 是水平堆叠 ,需注意 )
a6 = np.concatenate((array1,array2),axis=0)# 垂直组合
a7 = np.vstack((array2,array1))a8 = np.concatenate((array1,array2),axis=0)
print(1)
八.numpy 内数组元素的切割
import numpy as nparray1 = np.arange(16).reshape(4,4)
print(array1)# 水平切割,hsplit 按水平方向(列方向)切割,分成 2 等份
a = np.hsplit(array1,2)
# split 实现水平切割,axis=1 表示列方向
b = np.split(array1,2,axis=1)# 垂直切割,vsplit 按垂直方向(行方向)切割,分成 2 等份
c = np.vsplit(array1,2)
# split 实现垂直切割,axis=0 表示行方向
d = np.split(array1,2,axis=0)# 强制切割(不等份切割 )
# 水平强制切割,axis=1 列方向,分成 3 份(不等份 )
e = np.array_split(array1,3,axis=1)# 垂直强制切割,axis=0 行方向,分成 3 份(不等份 )
f = np.array_split(array1,3,axis=0)array1 = np.arange(25).reshape(5,5)
print(array1)# 水平强制切割,axis=1 列方向,分成 3 份(不等份 )
g = np.array_split(array1,3,axis=1)# 垂直强制切割,axis=0 行方向,分成 3 份(不等份 )
h = np.array_split(array1,3,axis=0)
九.数组的算数运算
import numpy as nparray1 = np.arange(1, 5, 1).reshape(2, 2)
array2 = 2 * array1
print(array1)
print(array2)# 数组的加法【对应位置的元素求和】
print(array1 + array2)# 数组的减法[对应位置元素相减]
print(array1 - array2)# 数组的乘法【对应位置相乘】
print(array1 * array2)# 数组的除法[对应位置相除]
print(array1 / array2)# 数组的取余(%)
print(array2 % array1)# 数组的取整
print(array1 // array2)
十. 数组的深拷贝与浅拷贝
import numpy as nparray1 = np.array([1, 2, 3])
# 浅拷贝
array2 = array1# 更改array2的元素的值
array2[0] = 100
print(array2)
print("######################")
print(array1)# 深拷贝
array3 = array1.copy()
array3[0] = 10
print(array3)
print("######################")
print(array1)
十一.numpy 内的随机模块 (一).py
import random
import numpy as np
import matplotlib.pyplot as plt
"""
randint(start,end):
产生一个随机整数
(0,10) ->左闭右开的区间
"""
# 随机种子
np.random.seed(1000) # random 矩阵类型随机
r1 = np.random.randint(0, 10)
print(r1)a = []
for i in range(100):a0 = np.random.randint(0, 10)a.append(a0)
print(a)
plt.hist(a, color='r') # 绘制直方图
plt.show()
numpy 内的随机模块 (二)
import numpy as np
"""
rand() ->(0,1)之间的随机浮点数
"""
# np.random.seed(100)
r1 = np.random.rand()
print(r1)"""
normal() ->生成一些符合正态分布的数据
N~(0,1)
numpy.random.normal(loc=0.0, scale=1.0, size=None)
参数说明:
loc: 正态分布的均值(期望值), 决定了分布的中心位置, 默认值为 0.0
scale: 正态分布的标准差, 决定了分布的离散程度, 默认值为 1.0
size: 输出数组的形状, 可以是整数(表示一维数组长度)或元组(表示多维数组形状), 默认值为 None(返回单个值)
"""
r2 = np.random.normal()
print(r2)##########################
# 生成随机数矩阵
r3 = np.random.randint(0, 10, size=(5, 5))
print(r3)r4 = np.random.rand(5, 5)
print(r4)r5 = np.random.normal(5, 10, size=(5, 5))
print(r5)
十二.numpy 内一些函数的使用
import numpy as nparray1 = np.random.normal(size=(3, 3))
print(array1)# 一些函数
# 求方差
print(array1.var())# 求标准差
a = array1.std()# 求均值
b = array1.mean()# 求和
c = array1.sum()# 求中位数
# array1.median()
d = np.median(array1)# 求和运算
# 对矩阵的行求和
e = array1.sum(axis=1)
# 对矩阵的列进行求和
f = array1.sum(axis=0)
十二.矩阵的运算
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)
numpy 文件读写示例
# numpy.loadtxt(): 从文本文件中加载数据。这个函数假定文件中的每一行都有相同数量的值,
# 你可以使用 delimiter 参数指定分隔符, 如逗号、制表符等。例如:
import numpy as npdata = np.loadtxt('datingTestSet2.txt', delimiter='\t')
print(data)# 将数组保存到txt文件中
import numpy as nparray = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 创建一个 NumPy 数组
np.savetxt('array.txt', array) # 使用 savetxt() 将数组保存到文本文件中