当前位置: 首页 > news >正文

numpy库的基础知识(二)

一.数据的降维

1.改变数组的形状

import  numpy as np
list=[1,2,3,4,5,6,7,8]
v=np.array(list)
v=v.reshape(2,2,2)
print(v)

ndarray.reshape()可以在不改变数组大小的情况下改变数组的形状。

可以用 reshape 来改变它的形状,如上面的reshape(2,2,2)

也可以用 np.reshape() 函数,这样可以额外传入几个可选参数:

import  numpy as np
a=[1,2,3,4,5,6,7,8]
b=np.reshape(a, newshape=(2, 4), order='C')
print(b)

a 是原数组
newshape 是新形状,要和原来的形状适配
order 是方法,主要有 3 种,C 方式是行主序,F (Fortran)方式是列主序,A 是自动根据内存分配方式

行主序:在内存中按照一行一行连续存储,因此元素分配从前往后是 (0,0) , (0,1) , (0,2) ,(1,0),(1,1),(1,2) 列主序:在内存中按照一列一列连续存储,因此元素分配从前往后是 (0,0) , (1,0) , (0,1) ,(1,1),(0,2),(1,2)

import  numpy as np
a=[1,2,3,4,5,6,7,8]
b=np.array(a)
c=b.reshape(2,2,2)
print(c.ravel())

 reval()将高维数组转化为1维

 ravel方法(如果可能)返回的是原始数组的视图,因此对返回的一维数组所做的修改可能会影响原始的多维数组。

import  numpy as np
a=[1,2,3,4,5,6,7,8]
b=np.array(a)
c=b.flatten()
print(c)#[1 2 3 4 5 6 7 8]

 flatten方法返回的是原数组的副本,这意味着对返回的一维数组所做的任何修改都不会影响原始的多维数组。

2.创建元素全是 0 的数组

import  numpy as np
a=np.zeros((2,2))
print(a)

3.创建元素全是 1 的数组

import  numpy as np
a=np.ones((2,2,2))
print(a)

4.创建全为5的数组,矩阵中全部填充指定的数据

import  numpy as np
g= np.full((2,2,2),5)
print(g)

5.创建主对角线全为1的数组

import  numpy as np
a= np.eye(5,5)
print(a)

6.可以指定范围和步长

import  numpy as np
a= np.arange(2, 9, 2)
print(a)#[2 4 6 8]

7.几个间相等的元素

import  numpy as np
a= np.linspace(0, 10, num = 5)
print(a)#[ 0. ,  2.5,  5. ,  7.5, 10. ])0(包含) 到 10(包含) 之间 5 个间隔相同的元素

二.增、删、排序

1.数组排序的主要函数是 np.sort() , 你可以指定排序的轴 (axis)、方法(kind)、升逆序(order)等。

import  numpy as np
arr = np.array([2, 1, 5, 3, 7, 4, 6, 8])
a=np.sort(arr)
print(a)#[1 2 3 4 5 6 7 8]

2.也可以在第一维度上把他们连接起来

import  numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c=np.concatenate((a, b), axis=0)
print(c)#[1 2 3 4 5 6 7 8]

axis=0表示横向连接

axis=1表示纵向连接

3.添加新轴

可以用 np.newaxis , np.expand_dims 来拓展已有数组的维度,n 维数组加上一根新轴变成 
n+1维数组

import  numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a2 = a[np.newaxis, :]
print(a2)#[[1 2 3 4 5 6]]

也可以用 np.expand_dims 来指定新维度的插入位置

import  numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b=np.expand_dims(a, axis=1)
print(b)

三. 数组操作与索引

1.索引与切片

import numpy as np
arr = np.arange(36).reshape(6,  6)
print(arr)
# 基本索引
print(arr[2, 3])        # 第2行第3列元素
print(arr[1:3, 2:5])    # 第1-2行,第2-4列的子数组
print(arr[:, ::2])      # 所有行,每隔一列# 高级索引
bool_idx = arr > 30     # 布尔索引
print(arr[bool_idx])fancy_idx = arr[[0, 2, 4], [1, 3, 5]]  # 花式索引
print(fancy_idx)

 2.形状操作

import numpy as np
orig_arr = np.arange(12)# 重塑形状 - 不改变数据
reshaped = orig_arr.reshape(3,  4)
print(reshaped)# 调整大小 - 可能改变原数组
a=orig_arr.resize((4,  3))
print(a)# 展平数组
flattened = reshaped.flatten()     # 返回副本
raveled = reshaped.ravel()   # 返回视图
print(flattened)
print(raveled)# 维度变换
transposed = reshaped.T           # 转置
swap_arr = np.swapaxes(reshaped,  0, 1)  # 交换轴
print(transposed)
print(swap_arr)

 3.数组组合

a = np.array([[1,  2], [3, 4]])
b = np.array([[5,  6]])# 垂直堆叠
v_stack = np.vstack((a,  b))     # 或 np.concatenate((a,  b), axis=0)# 水平堆叠
h_stack = np.hstack((a,  b.T))   # 或 np.concatenate((a,  b.T), axis=1)# 深度堆叠
d_stack = np.dstack((a,  a))     # 沿第三维堆叠# 分割数组
sub_arrays = np.split(v_stack,  [2, 3])  # 在指定位置分割

四.数学运算

a = np.array([1,  2, 3])
b = np.array([4,  5, 6])# 基本运算
print(a + b)    # 加法
print(a * b)    # 乘法(逐元素)
print(a @ b)    # 点积(向量)
print(a ** 2)   # 平方# 通用函数(ufunc)
print(np.sin(a))         # 正弦函数
print(np.exp(b))         # 指数函数
print(np.log(a))         # 自然对数
print(np.modf(b))        # 小数和整数部分分离

线性代数操作:

from numpy import linalg as LAmat = np.array([[1,  2], [3, 4]])# 矩阵求逆
inv_mat = LA.inv(mat) # 行列式
det = LA.det(mat) 

五.numpy高级运用

import numpy as np
# 定义结构化数据类型
dtype = [('name', 'U10'), ('age', 'i4'), ('height', 'f4')]# 创建结构化数组
people = np.array([('Alice', 28, 1.68),('Bob', 35, 1.82),('Carol', 24, 1.73)
], dtype=dtype)# 字段访问
print(people['name'])      # 所有名字
print(people[people['age'] > 30])  # 筛选年龄>30的记录

 

http://www.xdnf.cn/news/1168957.html

相关文章:

  • 理解后端开发中的API设计原则
  • 达梦数据库表字段增加时报错[-2106]:无效的表或视图名,[-2116]:列[IS_REPEAT]已存在
  • [3-02-02].第04节:开发应用 - RequestMapping注解的属性2
  • 支付网关系统前后端鉴权方案
  • 网络原理 HTTP 和 HTTPS
  • 代码检测SonarQube+Git安装和规范
  • Uni-App:跨平台开发的终极解决方案
  • uniapp打开导航软件并定位到目标位置的实现
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • uni-calendar自定义签到打卡颜色
  • Apache Ignite 中的 SQL 模式(Schema)管理机制
  • 使用python中的pymysql库,并且转化为数组元组数据
  • adb的使用
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • Linux的磁盘存储管理实操——(下一)——标准分区扩容
  • Ajax第一天
  • GoLand 部署第一个项目
  • 【Python】常见模块及其用法
  • 认识自我的机器人:麻省理工学院基于视觉的系统让机器了解自身机体
  • 【LeetCode 热题 100】46. 全排列——回溯
  • Windows 编程辅助技能:转到文档
  • Docker实战系列:使用Docker部署AI SSH客户端工具IntelliSSH
  • 2025年远程桌面软件深度评测:ToDesk、向日葵、TeamViewer全方位对比分析
  • Golang避免主协程退出方案
  • 期权分红怎么分的?
  • Thinkphp8使用Jwt生成与验证Token
  • Spring之【Bean工厂后置处理器】
  • MybatisPlus入门指南
  • LeetCode 658.找到K个最接近的元素
  • 豪鹏科技锚定 “AI + 固态” 赛道:从电池制造商到核心能源方案引领者的战略跃迁