NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
Microsoft Windows [版本 10.0.19043.1645]
(c) Microsoft Corporation。保留所有权利。
C:\WINDOWS\system32>pip install numpy
Requirement already satisfied: numpy in c:\users\1234\anaconda3\lib\site-packages (1.20.3)
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 ndarray 对象是用于存放同类型元素的多维数组。 ndarray 中的每个元素在内存中都有相同存储大小的区域。
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称: 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
import numpy as np
a = np.array([1,2,3])
print (a)
from numpy import *
import numpy as np
b=np.array([1,2,3])
print(b)
print(b.dtype)
print(b.shape)
from numpy import *
import numpy as np
c=np.array([['a','b','c']])
print(c)
print(c.shape)
from numpy import *
import numpy as np
d=np.array([1,2,3],ndmin=2)
print(d)
名称 | 描述 |
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面:
数据的类型(整数,浮点数或者 Python 对象) 数据的大小(例如, 整数使用多少个字节存储) 数据的字节顺序(小端法或大端法) 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分 如果数据类型是子数组,那么它的形状和数据类型是什么。
字节顺序是通过对数据类型预先设定 < 或 > 来决定的。
< 意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。>
意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)
from numpy import *
import numpy as np
e=np.array([1,2,3],dtype=float32)
print(e)
from numpy import *
import numpy as np
dt=np.dtype(np.int32)
dt=np.dtype('f4')
from numpy import *
import numpy as np
a=np.array([1,2,3],dtype=dt)
print(a)
from numpy import *
import numpy as np
#int8,int16,int32,int64可以使用字符串代替'i1','i2','i4','i8'
#字符串以使用字符串代替'S30'
#浮点型以使用字符串代替'f4'
#定义数据类型
st=np.dtype([('name','S30'),('age','i1'),('marks','f4')])
b=np.array([('abc',21,50),('zxc',18,81),('yyy',25,90)],dtype=st)
print(b)
print(len(b))
from numpy import *
import numpy as np
n=np.empty([3,3],dtype=np.float32,order='C')
print(n)
from numpy import *
import numpy as np
z=np.zeros([2,2],dtype='i4',order='C')
print(z)
from numpy import *
import numpy as np
x=np.zeros([2,2],dtype=[('x','i1'),('y','i4')])
print(x)
print(len(x))
from numpy import *
import numpy as np
c=np.ones([3,3],dtype='f4')
print(c)
from numpy import *
import numpy as np
t=(3,4,5)
at=np.asarray(y)
print(at)
from numpy import *
import numpy as np
lt=[(1,2,3),(4,5)]
alt=np.asarray(lt,dtype=object)
print(alt)
from numpy import *
import numpy as np
aa=np.arange(10,20,2,dtype=float)
print(aa))
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。 ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
from numpy import *
import numpy as np
a=np.arange(20)
print(a)
from numpy import *
import numpy as np
a=np.arange(20)
b=slice(3,9,2)
print(a[b])
from numpy import *
import numpy as np
a=np.arange(20)
print(a)
from numpy import *
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[1:])
from numpy import *
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[1:,1:])
print(a[...,1:])
print(a[1,1])
print("*"*100)
print(a[1:3,0:2])
print(a[1:3,0:4:2])
print(a[0:4,2:3])
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
from numpy import *
import numpy as np
a=np.array([1,2,3,4])
b=np.array([10,20,30,40])
c=a*b
print(c)
from numpy import *
import numpy as np
a=np.array([[0,0,0],
[10,10,10],
[20,20,20],
[30,30,30]])
b=np.array([[1,2,3]])
bb=np.tile(b,(4,1))#重复b的各个维度
print(bb)
print(a+bb)
from numpy import *
import numpy as np
a=np.array([[0,0,0],
[10,10,10],
[20,20,20],
[30,30,30]])
b=np.array([[1,2,3]])
print(b)
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
from numpy import *
import numpy as np
a=np.arange(8)
print(a.reshape(2,4))
from numpy import *
import numpy as np
a=np.arange(9).reshape(3,3)
from numpy import *
import numpy as np
a=np.arange(8)
for i in a:
print(i)
from numpy import *
import numpy as np
a=np.arange(8)
for i in a.flat:
print(i)
from numpy import *
import numpy as np
a=np.arange(8)
for i in np.nditer(a):
print(i)
from numpy import *
import numpy as np
a=np.arange(8).reshape(2,4)
print(a)
print(a.flatten(order="C"))
print("*"*100)
from numpy import *
import numpy as np
a=np.arange(4).reshape(2,2)
print(a.ravel(order="C"))
print("*"*100)
from numpy import *
import numpy as np
a=np.arange(8).reshape(4,2)
print(a)
print(np.transpose(a))
print("*"*100,"对换数组维度")
from numpy import *
import numpy as np
a=np.arange(4).reshape(1,4)
b=np.broadcast_to(a,(4,4))
print(b)
print("*"*100)
from numpy import *
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
print(np.concatenate((a,b),0))
print("*"*100)
from numpy import *
import numpy as np
a=np.arange(9)
b=np.split(a,3)
print(b)
print("*"*100)
from numpy import *
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.append(a,[7,8,9])
print(b.reshape(3,3))
print("*"*100)
from numpy import *
import numpy as np
a=np.arange(12).reshape(3,4)
b=np.delete(a,5)
print(b)
b=np.delete(a,1,axis=1);
print(b)
函数 | 描述 |
add() | 对两个数组的逐个字符串元素进行连接 |
multiply() | 返回按元素多重连接后的字符串 |
center() | 居中字符串 |
capitalize() | 将字符串第一个字母转换为大写 |
title() | 将字符串的每个单词的第一个字母转换为大写 |
lower() | 数组元素转换为小写 |
upper() | 数组元素转换为大写 |
split() | 指定分隔符对字符串进行分割,并返回数组列表 |
splitlines() | 返回元素中的行列表,以换行符分割 |
strip() | 移除元素开头或者结尾处的特定字符 |
join() | 通过指定分隔符来连接数组中的元素 |
replace() | 使用新字符串替换字符串中的所有子字符串 |
decode() | 数组元素依次调用str.decode |
encode() | 数组元素依次调用str.encode |
from numpy import *
import numpy as np
print(np.char.add(["hello"],["xyz"]))
print()
print(np.char.add(["hello","123"],["xyz","456"]))
print()
from numpy import *
import numpy as np
print(np.char.multiply("abc",3))
print()
from numpy import *
import numpy as np
#(字符串,长度,填充字符)
print(np.char.center("by",20,fillchar="*"))
print()
from numpy import *
import numpy as np
print(np.char.capitalize("abc"))
print()
from numpy import *
import numpy as np
print(np.char.title("abc def"))
print()
from numpy import *
import numpy as np
print(np.char.lower(['ABC','DEF']))
print()
from numpy import *
import numpy as np
print(np.char.upper(['aBC','dEF']))
print()
from numpy import *
import numpy as np
print(np.char.split("i like run?"))
print(np.char.split("wwww.baidu.com",sep='.'))
print()
from numpy import *
import numpy as np
print(np.char.splitlines("i\nlike\nrun?"))
print()
from numpy import *
import numpy as np
print(np.char.strip("1abc1111def1","1"))
print(np.char.strip(['aeee','awwww'],'a'))
print()
from numpy import *
import numpy as np
print(np.char.join([":","_"],["abcd","123"]))
from numpy import *
import numpy as np
print(np.char.replace("i like runoob ","oo","cc"))
from numpy import *
import numpy as np
#默认编码utf-8
a=np.char.encode("abc","cp500")
print(a)
from numpy import *
import numpy as np
a=np.char.encode("abc","cp500")
print(np.char.decode(a,"cp500"))
print()
from numpy import *
import numpy as np
a=np.array([-1.4,1.5,11,33])
print(np.floor(a))
print()
from numpy import *
import numpy as np
a=np.array([-1.4,1.5,11,33])
print(np.floor(a))
print()
from numpy import *
import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])
print (b)
print ('\n')
print ('两个数组相加:')
print (np.add(a,b))
print ('\n')
print ('两个数组相减:')
print (np.subtract(a,b))
print ('\n')
print ('两个数组相乘:')
print (np.multiply(a,b))
print ('\n')
print ('两个数组相除:')
print (np.divide(a,b))
from numpy import *
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 amin() 函数:')
print (np.amin(a,1))
print ('\n')
print ('再次调用 amin() 函数:')
print (np.amin(a,0))
print ('\n')
print ('调用 amax() 函数:')
print (np.amax(a))
print ('\n')
print ('再次调用 amax() 函数:')
print (np.amax(a, axis = 0))
from numpy import *
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 ptp() 函数:')
print (np.ptp(a))
print ('\n')
print ('沿轴 1 调用 ptp() 函数:')
print (np.ptp(a, axis = 1))
print ('\n')
print ('沿轴 0 调用 ptp() 函数:')
print (np.ptp(a, axis = 0))
from numpy import *
import numpy as np
a = np.array([[3,7],[9,1]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 sort() 函数:')
print (np.sort(a))
print ('\n')
print ('按列排序:')
print (np.sort(a, axis = 0))
print ('\n')
from numpy import *
import numpy as np
dt = np.dtype([('name', 'S10'),('age', int)])
a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt)
print ('我们的数组是:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order = 'name'))
from numpy import *
import numpy as np
x = np.array([3, 1, 2])
print ('我们的数组是:')
print (x)
print ('\n')
print ('对 x 调用 argsort() 函数:')
y = np.argsort(x)
print (y)
print ('\n')
print ('以排序后的顺序重构原数组:')
print (x[y])
print ('\n')
print ('使用循环重构原数组:')
for i in y:
print (x[i], end=" ")