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

【Python】numpy:构建数组、数组属性、更改数组形状或维度、数组拷贝、数组合并、数组拆分、删除数组、数组保存到文件

Numpy是Python的扩展库(第三方库),支持维度数组和矩阵运算,是运算速度很快的数学库。

Numpy官方文档:NumPy user guide — NumPy v2.0 Manual

帮助:可使用help(...)查看函数说明文档(若是第三方库的函数,需先导入库)。例如:help(np.array)

附:数组array:一维数组、二维数组、更高维度的数组等。

一维数组:(元素数量,),二维数组:(行,列),三维数组:(多少个二维数组或高度,行,列)。


使用pip安装numpy:

pip install numpy

Python代码中,导入numpy:

import numpy as np


1、构建数组:

(1-1)根据已有序列,构建数组

array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0,like=None)

Returns : ndarray

  • np.array(序列):其中序列可以是列表、数组、元组等。

(1-2)根据首尾值和步长,构建数组

arange([start,] stop[, step,], dtype=None, *, like=None)

Returns : ndarray

  • np.arange(起始值, 结束值, 步长, dtype=元素类型):从起始值(含)开始,到结束值(不含)为止,间隔步长的所有指定类型的值。
  • np.arange(值, dtype=元素类型):默认从0(含)开始,到指定值(不含)为止,默认间隔1。

注:若遇到舍入,则影响结束值的大小,元素数量不变。

(1-3)根据首尾值和均分数量,构建数组

 linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

 Returns : ndarray

  • np.linspace(起始值, 结束值, 元素数量, dtype=元素类型):从起始值(含)开始,到结束值(含)为止,平分为指定数量且指定类型的值。

注:endpoint可设置是否包含结束值,默认包含,若不包含,可将endpoint=False。

(1-4)构建有值的数组

(1-4-1)所有值为0

zeros(shape, dtype=float, order='C', *, like=None)

Returns : ndarray

  • np.zeros(一维的元素数量, dtype=元素类型):指定数量、指定类型且全部为0的一维数组。 默认是浮点数(float64)。
  • np.zeros((二维的行数, 二维的列数), dtype=值类型):指定行数列数、指定类型且全部为0的二维数组。 默认是浮点数(float64)。注:用元组形式指定行列数,即 (行数, 列数)。

(1-4-2)所有值为1

zeros(shape, dtype=float, order='C', *, like=None)

Returns : ndarray

  •  np.ones(...) :与np.zeros(...)用法相同,只是值全部为1。

(1-4-3)所有值为指定值

full(shape, fill_value, dtype=None, order='C', *, like=None)

Returns : ndarray

  •  np.full(...) :与np.zeros(...)用法相同,只是值全部为人为指定的值。 

(1-4-4)所有值为已有内存空间的值

empty(shape, dtype=float, order='C', *, like=None)

Returns : ndarray

  •   np.empty(...) :与np.zeros(...)用法相同,只是值为内存空间中的值(没有初始化)。

 

(1-5)通过对行列坐标执行函数,构建数组

fromfunction(function, shape, *, dtype=<class 'float'>, like=None, **kwargs)

  • np.fromfunction(函数, 数组形状, 元素类型):将各轴的坐标作为参数传入函数,构建指定形状和指定类型的数组。注:数组形状用元组形式表示。

 (1-6)从文件获取,构建数组

  • fromfile(file, dtype=float, count=-1, sep='', offset=0, *, like=None)
  • load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
  • loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None, *, like=None)
  • np.fromfile(...):从文本或二进制文件中获取数据,构建数组。
  • np.load(...):从".npy", "npz",或pickled文件中获取数组或pickled对象。
  • np.loadtxt(...):从文本文件中获取数据,构建数组。注:每行有相同数量的元素。
  • 注:在【8、数组保存到文件】有部分举例。 

(1-7)构建特殊数组

(1-7-1)n*n二维数组,对角线为1,其余为0

identity(n, dtype=None, *, like=None)

Returns : ndarray(n*n二维数组,对角线为1,其余为0)

  • np.identity(n,dtype=元素类型): 构建n*n二维数组,对角线为1,其余都为0。默认元素类型为浮点数。

(1-7-2)N*M二维数组,对角线为1(对角线索引号可改),其余为0

eye(N, M=None, k=0, dtype=<class 'float'>, order='C', *, like=None)

Returns: ndarray of shape (N,M)

  • np.eye(N):构建N行N列的二维数组,对角线为1,其余为0。对角线索引号默认是0。没有M参数,则M=N。
  • np.eye(N, M=列数, k=对角线索引号, dtype=元素类型):构建N行M列的二维数组,对角线为1,其余为0。对角线索引号为指定索引号。有M参数,则二维数组形状为(N,M)。


2、数组属性:

  • ndim(维度)。
  • shape(各维度分别有多少元素)。
  • size(共有多少元素)。
  • dtype(元素的类型)。
  • itemsize(每个元素占多少内存空间)。
  • nbytes(共占多少内存空间)


3、数组更改形状或维度:

(3-1)增加一个维度

一维数组:(元素数量,) ---->  二维数组:(行,列)

  • 数组[np.newaxis , :]:在第一个维度添加一个轴。一维变二维。
  • 数组[: , np.newaxis]:在第二个维度添加一个轴。一维变二维。

二维数组:(行,列) ---->  三维数组:(高度,行,列)

  • 数组[np.newaxis , : , :]:在第一个维度添加一个轴。二维变三维。
  • 数组[: , np.newaxis , :]:在第二个维度添加一个轴。二维变三维。
  • 数组[: , : , np.newaxis]:在第三个维度添加一个轴。二维变三维。

(3-2)指定位置插入轴,来增加一个维度

expand_dims(a, axis)

Returns : ndarray

  • np.expand_dims(待更改的数组, axis=指定位置):

 

(3-3)二维及以上维度数组,转为一维数组

  • 多维数组.flatten():多维数组转为一维数组。修改一维数组的值不会影响原多维数组。
  • 多维数组.ravel():多维数组转为一维数组。修改一维数组的值也会修改原多维数组。

(3-4)更改数组形状,也可更改数组维度

reshape(a, newshape, order='C')

Returns : ndarray

  • np.reshape(待更改的数组, 更改后的形状):更改形状也可更改维度。若一个轴使用-1,则该轴自动调整。
  • 也可以:待更改的数组.reshape(更改后的形状)

 


(3-5)更改数组形状,可转置(行转为列,列转为行)

  • np.transpose(二维数组):二维数组行列转置(行转为列,列转为行)。等效于:二维数组.transpose()。
  • 二维数组.T:二维数组行列转置。
  • np.swapaxes(数组, 0, 1):维数组行列转置。等效于:二维数组.swapaxes(0, 1)。

swapaxes也可将多维数组的两个轴交换。

  • np.swapaxes(多维数组, 待交换的轴1, 待交换的轴2):将多维数组的指定的轴1和轴2交换。等效于:二维数组.swapaxes(待交换的轴1, 待交换的轴2)。 


4、数组拷贝:

  • 通过"="赋值的方式拷贝的数组,和原数组是同一个对象,修改其中一个数组,另一个也会修改。
  • 通过"view( )"函数拷贝的数组,和原数组虽不是同一个对象,但它们的base是同一个,修改其中一个数组,另一个也会修改。
  • 通过"copy( )"函数拷贝的数组,和原数组是独立的,既不是同一个对象,base也不是同一个,修改其中一个数组,不会影响另一个。


5、数组合并:

(5-1)指定轴合并数组

concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")

Returns : ndarray

  • np.concatenate( (数组1, 数组2) ) :两数组维度相同,默认axis=0,即列数相同,上下纵向拼接。
  • np.concatenate( (数组1, 数组2), axis=1) :两数组维度相同,行数相同,左右横向拼接。
  • np.concatenate( (数组1, 数组2), axis=None) :两数组维度相同,转为一维数组拼接。

(5-2)左右横向合并

hstack(tup)

Returns : ndarray

注:适用于维度最大为3的数组。

  • np.hstack( (数组1, 数组2) ) :两数组维度相同,行数相同,左右横向拼接。

(5-3)上下纵向合并

vstack(tup)

Returns : ndarray

注:适用于维度最大为3的数组。

  • np.vstack( (数组1, 数组2) ) :两数组维度相同,列数相同,上下纵向拼接。

 

(5-4)一维数组作为列,合并成二维数组

column_stack(tup)

Returns : 2-D array

注:一维数组都作为列,横向拼接成二维数组。

  • np.column_stack( (数组1, 数组2) ) :一维数组,元素数量相同,分别作为列,左右横向拼接。


6、数组拆分

(6-1)指定拆分数量或指定拆分坐标,指定轴拆分

split(ary, indices_or_sections, axis=0)

Returns: list of ndarrays

  •  np.split(数组, 拆分数量):将数组平均拆分成指定数量的小数组。默认axis=0,即列数不变,行平均拆分。
  •  np.split(数组, [坐标1, 坐标2, ...]):将数组按指定坐标拆分成多个小数组。默认axis=0,即列数不变,从指定行拆分。坐标从0开始。

(6-2)指定拆分数量或指定拆分坐标,左右横向拆分

hsplit(ary, indices_or_sections)

Returns: list of ndarrays

  •  np.hsplit(数组, 拆分数量):将数组平均拆分成指定数量的小数组。行数不变,列平均拆分。
  •  np.hsplit(数组, [坐标1, 坐标2, ...]):将数组按指定坐标拆分成多个小数组。行数不变,从指定列坐标拆分。坐标从0开始。

(6-3)指定拆分数量或指定拆分坐标,上下纵向拆分

vsplit(ary, indices_or_sections)

Returns: list of ndarrays

  •  np.vsplit(数组, 拆分数量):将数组平均拆分成指定数量的小数组。列数不变,行平均拆分。
  •  np.vsplit(数组, [坐标1, 坐标2, ...]):将数组按指定坐标拆分成多个小数组。列数不变,从指定行坐标拆分。坐标从0开始。


7、删除数组:del 数组


8、数组保存到文件:

(8-1)数组保存到npy文件(二进制文件)

save(file, arr, allow_pickle=True, fix_imports=True)

  • np.save(保存的文件, 数组):将数组保存到npy文件(二进制文件)中。 

(8-2)数组保存到文本文件

savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)

  • np.savetxt(保存的文件, 数组, fmt=数值格式):将数组保存到文本文件中。 


 


补充:np.zeros_like(...)、np.ones_like(...)、np.full_like(...)和np.empty_like(...)

zeros_like(a, dtype=None, order='K', subok=True, shape=None)

Returns : ndarray

ones_like(a, dtype=None, order='K', subok=True, shape=None)

Returns : ndarray

full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None) 

Returns : ndarray

empty_like(prototype, dtype=None, order='K', subok=True, shape=None) 

Returns : ndarray

相关文章:

  • python数据预处理工作记录
  • C++ Primer:3.6 多维数组
  • 人工智能前沿讲座——融合知识的自然语言处理
  • 用python写一个爬虫,爬取google中关于蛇的照片
  • OpenLayers学习笔记-点位聚合
  • python爬虫豆瓣电影TOP250
  • FakeNewsGPT4:通过知识增强的大规模视觉语言模型推进多模态假新闻检测
  • Python和C++骨髓细胞进化解析数学模型
  • prometheus+grafana应用监控配置
  • 基于springboot+vue+uniapp的超市购物系统小程序
  • 【Java--数据结构】二叉树oj题(上)
  • Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验
  • LeetCode 92. 反转链表 II
  • Hi3861 OpenHarmony嵌入式应用入门--华为 IoTDA 设备接入
  • 堆、栈和队列(数据结构)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 30秒的PHP代码片段(1)数组 - Array
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Docker入门(二) - Dockerfile
  • leetcode讲解--894. All Possible Full Binary Trees
  • nfs客户端进程变D,延伸linux的lock
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Shadow DOM 内部构造及如何构建独立组件
  • vue数据传递--我有特殊的实现技巧
  • 关于字符编码你应该知道的事情
  • 将 Measurements 和 Units 应用到物理学
  • 软件开发学习的5大技巧,你知道吗?
  • 想写好前端,先练好内功
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 云大使推广中的常见热门问题
  • 怎么把视频里的音乐提取出来
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # SpringBoot 如何让指定的Bean先加载
  • #70结构体案例1(导师,学生,成绩)
  • #define用法
  • #include
  • #每天一道面试题# 什么是MySQL的回表查询
  • (175)FPGA门控时钟技术
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (第61天)多租户架构(CDB/PDB)
  • (剑指Offer)面试题34:丑数
  • 、写入Shellcode到注册表上线
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net wcf memory gates checking failed
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 使用反射注册事件
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .Net组件程序设计之线程、并发管理(一)
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @EnableWebSecurity 注解的用途及适用场景
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解