目录
numpy.argmax() 和 numpy.argmin()
numpy.savetxt()与numpy.loadtxt()
参考
将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
简介
![](https://i-blog.csdnimg.cn/blog_migrate/71ca5a5e18e382a972b5ec6786b55c8d.png)
详介
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]]
'''
![](https://i-blog.csdnimg.cn/blog_migrate/99716ef45b9ec8d02f73dafd43ef07d4.png)
NumPy 数据类型
numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应。
numpy 的数值类型实际上是 数据类型对象dtype 的实例。dtype 用来描述与数组对应的内存区域如何使用。
NumPy 数组属性
NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions),而轴的数量——秩,就是数组的维数。。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。
很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
![](https://i-blog.csdnimg.cn/blog_migrate/7c2550c69e85d3f75bb3ef564bb37d08.png)
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
![](https://i-blog.csdnimg.cn/blog_migrate/bce79286cfc1af1ec4b88261feac7c54.png)
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
![](https://i-blog.csdnimg.cn/blog_migrate/a50b3349fa9c41cd64cf7b00b33b3b8d.png)
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
![](https://i-blog.csdnimg.cn/blog_migrate/854242deefeaac1fb87b78c92e060e23.png)
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。