【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

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值