【Python库】Numpy(较完整)

目录

参考

简介

详介

Ndarray 对象

NumPy 数据类型

NumPy 数组属性

Numpy的数组类ndarray的重要函数

NumPy 创建数组

numpy.empty

numpy.zeros

numpy.ones

NumPy 从已有的数组创建数组

numpy.asarray

numpy.frombuffer

numpy.fromiter

NumPy 从数值范围创建数组

numpy.arange

numpy.linspace等差

numpy.logspace等比

NumPy 切片和索引

 ~(取补运算符):过滤 NaN

NumPy 迭代数组

Numpy 数组操作

修改数组形状

翻转数组

修改数组维度

连接数组

分割数组

数组元素的添加与删除

NumPy 字符串函数 

NumPy 数学函数

NumPy 算术函数

NumPy 统计函数

numpy.amin() 和 numpy.amax()

NumPy 排序函数

numpy.sort()

numpy.argsort()

numpy.argmax() 和 numpy.argmin()

NumPy 矩阵库(Matrix)

numpy.matlib.empty()

numpy.matlib.zeros()全零

numpy.matlib.ones()全1

numpy.matlib.eye()

numpy.matlib.identity()

NumPy 线性代数

读写数据

numpy.save()

numpy.savez() 

numpy.savetxt()与numpy.loadtxt()

NumPy Matplotlib


参考

Numpy教程

Numpy教程_简书

Numpy中数据的常用的保存与读取方法

.npz文件的读取

flatten函数将二维数组转换为一维数组

将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法

 


简介

简介

 


详介

Ndarray 对象

N 维数组对象 ndarray,它是一系列同类型数据的集合,用于存放同类型元素的多维数组。

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:numpy.array()

#创建一维、二维数组
import numpy as np
dim1=np.array([1,2,3])
#[1 2 3]
dim2=np.array([[1,2,3],[4,5,6]]) #注:方括号的数量!
'''
[[1 2 3]
 [4 5 6]]
'''
建数组(个人尝试)

 

NumPy 数据类型

numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应。

numpy 的数值类型实际上是 数据类型对象dtype 的实例。dtype 用来描述与数组对应的内存区域如何使用。

NumPy 数组属性

NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions),而轴的数量——秩,就是数组的维数。。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组

很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

Numpy“轴”(别人写的,不一定对)

 

Numpy的数组类ndarray的重要函数

  • ndarray.ndim

    秩,即轴的数量或维度的数量

  • ndarray.shape

    数组的维度。以元组形式返回每一个轴的长度。对于一个n行m列的矩阵, shape即(n,m)

  • ndarray.size

    返回数组所有元素的数目。

  • ndarray.dtype

    返回数组中元素的数据类型

#reshape改变数组维度ndim(个人:改维度,关键在方括号的变化吧)
import numpy as np
a=np.arange(24)#现在a只有一个维度
print(a.ndim)#1
print(a)
#[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

#调整a维度大小
b=a.reshape(2,4,3)#改为三个维度,2部分+每部分4行3列
print(b.ndim)#3
print(b)
'''
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]

 [[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]'''


c=a.reshape(2,2,4,3)#改为四个维度,2部分+2部分+每部分4行3列
print(c.ndim)#4
print(c)
'''
[[[[ 0  1  2]
   [ 3  4  5]
   [ 6  7  8]
   [ 9 10 11]]

  [[12 13 14]
   [15 16 17]
   [18 19 20]
   [21 22 23]]]


 [[[24 25 26]
   [27 28 29]
   [30 31 32]
   [33 34 35]]

  [[36 37 38]
   [39 40 41]
   [42 43 44]
   [45 46 47]]]]'''
#ndarray.shape以及reshape也可以用于调整数组大小
#注:shape与reshape用法不同
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)#(2, 3)
a.shape=(3,2)  #或b=a.reshape(3,2)
print(a)
'''
[[1 2]
 [3 4]
 [5 6]]
 '''

NumPy 创建数组

numpy.empty

import numpy as np
#numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
x=np.empty([3,2],dtype=int)
print(x)#数组元素为随机值,因为它们未初始化
'''
[[ 543584032  543516788]
 [1769104755  537555813]
 [ 538976288 1948262432]]
'''

numpy.zeros

import numpy as np
#numpy.zeros创建指定大小的数组,数组元素以 0 来填充(# 默认为浮点数)
x=np.zeros(5)
print(x)#[0. 0. 0. 0. 0.]
x=np.zeros((2,4,3),dtype=np.int)#2部分 4行 3列
print(x)
'''
[[[0 0 0]
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  [0 0 0]]]
'''

numpy.ones

#numpy.ones创建指定形状的数组,数组元素以 1 来填充
import numpy as np
x=np.ones([2,3],dtype=int)# 或 dtype=np.int
print(x)
'''[[1 1 1]
 [1 1 1]]'''

 

NumPy 从已有的数组创建数组

numpy.asarray

numpy.asarray参数解释
import numpy as np
#将列表转换为 ndarray(多维数组)
x=[1,2,3]
a=np.asarray(x)
print(a)#[1 2 3]
print(type(a))#<class 'numpy.ndarray'>

numpy.frombuffer

参数解释
import numpy as np
#numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对
s=b'hello world'#若不加b,则报错TypeError: a bytes-like object is required, not 'str'
a=np.frombuffer(s,dtype='S1')
print(a)#[b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd']

numpy.fromiter

参数解释
import numpy as np
#numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组
#使用list函数创建列表对象
list=range(5)
print(type(list))#<class 'range'>
it=iter(list)
print(type(it))#<class 'range_iterator'>

#使用迭代器创建ndarray
x=np.fromiter(it,dtype=float)
print(x)#[0. 1. 2. 3. 4.]
print(type(x))#<class 'numpy.ndarray'>

NumPy 从数值范围创建数组

numpy.arange

import numpy as np
x=np.arange(5)
print(x)#[0 1 2 3 4]
xx=np.arange(2,5,1)
print(xx)#[2 3 4]

numpy.linspace等差

numpy.logspace等比

 

NumPy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。ndarray 数组可以基于 0 - n(不含n) 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

import numpy as np
x=np.arange(5)
print(x)#[0 1 2 3 4]
s=slice(2,4)
print(x[s])#[2 3]

切片还可以包括省略号,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,将返回包含行中元素的 ndarray。

import numpy as np

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])


a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1])  # 第2列元素
print(a[1, ...])  # 第2行元素
print(a[..., 1:])  # 第2列及剩下的所有元素
'''[[3 4 5]
 [4 5 6]]
[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]'''

 ~(取补运算符):过滤 NaN

import numpy as np

a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])#[nan  1.  2. nan  3.  4.  5.]
print(a)
print(a[~np.isnan(a)])#[1. 2. 3. 4. 5.]

 

NumPy 迭代数组

NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。

迭代器最基本的任务的可以完成对数组元素的访问。

import numpy as np
#使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代
#迭代输出数组元素
a=np.arange(6).reshape(2,3)
print('原始数组:',a)#[[0 1 2] [3 4 5]]
for x in np.nditer(a):
    print(x,end=',')#0,1,2,3,4,5,

nditer 对象有另一个可选参数 op_flags,可用于修改数组中元素的值。

 

Numpy 数组操作

修改数组形状

  • numpy.ndarray.flat 是一个数组元素迭代器
import numpy as np
#numpy.ndarray.flat 是一个数组元素迭代器
a=np.arange(9).reshape(3,3)
for row in a:
    print(row)
'''[0 1 2]
[3 4 5]
[6 7 8]'''

#对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器
for element in a.flat:
    print(element)
'''0
1
2
3
4
5
6
7
8'''
  • numpy.ndarray.flatten 返回一份数组拷贝
a=np.arange(9).reshape(3,3)
print(a.flatten())#[0 1 2 3 4 5 6 7 8]
  • numpy.ravel() 展平的数组元素
a=np.arange(9).reshape(3,3)
print(a.ravel())#[0 1 2 3 4 5 6 7 8]

翻转数组

  • numpy.transpose 函数用于对换数组的维度
a=np.arange(9).reshape(3,3)
print(a)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]'''
print(a.transpose())#或print(np.transpose(a))
'''[[0 3 6]
 [1 4 7]
 [2 5 8]]'''
  • numpy.rollaxis 函数(滚动轴)向后滚动特定的轴到一个特定位置
import numpy as np
a=np.arange(8).reshape(2,2,2)
print(a)
'''[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]'''
#将输入轴2滚动到轴0(宽度到深度)
print(np.rollaxis(a,2))
'''[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]'''
#将输入轴0滚动到轴1(宽度到高度)
print(np.rollaxis(a,2,1))
'''[[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]'''
  • numpy.swapaxes 函数用于交换数组的两个轴

修改数组维度

ravel & flatten 将数组变为一维

  • numpy.expand_dims 函数 通过在指定位置插入新的轴来扩展数组形状
import numpy as np
x=np.array(([1,2],[3,4]))
print(x)
'''[[1 2]
 [3 4]]'''
y0=np.expand_dims(x,axis=0)
print(y0)
'''[[[1 2]
  [3 4]]]'''#注意方括号的个数、位置变化

y1=np.expand_dims(x,axis=1)
print(y1)
'''[[[1 2]]

 [[3 4]]]'''

print(x.shape,y0.shape,y1.shape)#(2, 2) (1, 2, 2) (2, 1, 2)

 

连接数组

 

分割数组

数组元素的添加与删除

 

NumPy 字符串函数 

如numpy.char.capitalize('i love you')

import numpy as np
print(np.char.capitalize('i love you'))#I love you
print(np.char.title('i love you'))#I Love You

NumPy 数学函数

NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。

NumPy 算术函数

NumPy 算术函数包含简单的加减乘除: add()subtract()multiply() 和 divide()。需要注意的是数组必须具有相同的形状或符合数组广播规则。

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

 

NumPy 统计函数

从数组中查找最小元素,最大元素,百分位标准差和方差等。

numpy.amin() 和 numpy.amax()

numpy.amin() 用于计算数组中的元素沿指定轴的最小值;numpy.amax() 用于计算数组中的元素沿指定轴的最大值。

import numpy as np
a=np.array([[1,2,3],[2,3,4],[8,7,5]])#二维数组包括行和列
print(a.ndim) #2维数组
print(a.shape) #(3, 3) 3行3列

print(np.amin(a,0))#沿轴0的最小值 [1 2 3]
print(np.amax(a,0))#沿轴0的最大值[8 7 5]

print(np.amin(a,1))#沿轴1的最小值 [1 2 5]
print(np.amax(a,1))#沿轴1的最大值[3 4 8]

#axis=0表示作用于列;axis=1表示作用于行
#print(np.amin(a,2))  报错numpy.AxisError: axis 2 is out of bounds for array of dimension 2

NumPy 排序函数

numpy.sort()

numpy.sort() 函数返回输入数组的排序副本

numpy.argsort()

numpy.argsort() 函数返回的是数组值从小到大的索引值

numpy.argmax() 和 numpy.argmin()

分别沿给定轴返回最大和最小元素的索引

 

NumPy 矩阵库(Matrix)

numpy.matlib.empty()

返回一个随机矩阵

import numpy as np
import numpy.matlib
#numpy的__init__.py中并没有引入matlib,
# matlib是一个新的包,只有这样引入才不会错
m=np.matlib.empty((2,3))
print(m)
'''[[6.23042070e-307 1.89146896e-307 1.37961302e-306]
 [6.23053614e-307 6.23053954e-307 1.33511969e-306]]'''

numpy.matlib.zeros()全零

m=np.matlib.zeros((2,3),dtype=int)
print(m)
'''[[0 0 0]
 [0 0 0]]'''

numpy.matlib.ones()全1

numpy.matlib.eye()

对角线元素为 1,其他位置为零

numpy.matlib.identity()

给定大小的单位矩阵

NumPy 线性代数

 

读写数据

 

numpy.save()

import numpy as np
a=np.array([1,2,3])
np.save('a.npy',a)
#如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
print(np.load('a.npy'))#[1 2 3]

numpy.savez() 

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#注意方括号的个数
b=np.arange(0,1.0,0.1)
c=np.sin(b)#c使用了关键字参数sin_array
np.savez('runoob.npz',a,b,sin_array=c)
r=np.load('runoob.npz')

#查看各数组的名称
print(r['arr_0'])#数组a
'''[[1 2 3]
 [4 5 6]]'''
print(r['arr_1'])#数组b
#[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
print(r['sin_array'])#数组c
'''[0.         0.09983342 0.19866933 0.29552021 0.38941834 0.47942554
 0.56464247 0.64421769 0.71735609 0.78332691]'''

numpy.savetxt()与numpy.loadtxt()

 

NumPy Matplotlib

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

 

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值