numpy

简介

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

ndarray

ndarray 对象是用于存放同类型元素的多维数组。

创建ndarray

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

object: 数组或嵌套的数列
dtype: 数组元素的数据类型,可选
copy: 对象是否需要复制,可选
order: 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok: 默认返回一个与基类类型一致的数组
ndmin: 指定生成数组的最小维度
a = np.array([[1,  2],  [3,  4]]) 
[[1, 2] 
 [3, 4]]

#最小维度
a3 = np.array([1,2,3,4,5],ndmin = 3)
[[[1 2 3 4 5]]]
ndmin这个参数的意思是,不管你给的数据的维度是多少,我总是会创建给出的最小的维度,比如这里ndmin=3,虽然给出的数据是一位的,但是也会创建一个三维的处理。

a = np.array([1,  2,  3], dtype = complex) 
[ 1.+0.j,  2.+0.j,  3.+0.j]

数据类型

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 位浮点数(实数部分和虚数部分)

dtype

numpy.dtype(object, align, copy)

object - 要转换为的数据类型对象
align - 如果为 true,填充字段使其类似 C 的结构体。
copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)
[(10,) (20,) (30,)]

print(a['age'])
[10 20 30]
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) 
print(student)
输出:[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) 
print(a)
输出:[('abc', 21, 50.0), ('xyz', 18, 75.0)]

每个内建类型都有一个唯一定义它的字符代码,如下:

字符对应类型
b布尔型
i(有符号) 整型
u无符号整型 integer
f浮点型
c复数浮点型
mtimedelta(时间间隔)
Mdatetime(日期时间)
O(Python) 对象
S, a(byte-)字符串
UUnicode
V原始数据 (void)

数组

数组属性

属性说明
ndarray.ndim秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。
ndarray.shape数组的维度,对于矩阵,n 行 m 列
ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtypendarray 对象的元素类型
ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位
ndarray.flagsndarray 对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray 元素的虚部
ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
a = np.array([[1,2,3],[4,5,6]])  
print (a.shape)
输出:(2, 3)

创建数组

numpy.empty(shape, dtype = float, order = 'C')
创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
numpy.zeros(shape, dtype = float, order = 'C')
创建指定形状的数组,数组元素以 0 来填充
numpy.ones(shape, dtype = None, order = 'C')
创建指定形状的数组,数组元素以 1 来填充
实例:
x = np.ones([2,2], dtype = int)
print(x)
输出:[[1 1]
	 [1 1]]

从已有数组创建数组

numpy.asarray(a, dtype = None, order = None)
a:任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype:数据类型,可选
order:可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
x =  (1,2,3) 
a = np.asarray(x)  
print (a)
输出:[1  2  3]

从数值范围创建数组

numpy.arange(start, stop, step, dtype)
start: 起始值
stop : 终止值
step : 步长
dtype: 数据类型
x = np.arange(10,20,2)  
[10  12  14  16  18]

x = np.arange(5)  
[0  1  2  3  4]

切片,索引

a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
[2  4  6]

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

[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]

reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状

a = np.arange(8)
print ('原始数组:')
print (a)
 
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)

原始数组:
[0 1 2 3 4 5 6 7]

修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]

ndarray.flat

numpy.ndarray.flat 是一个数组元素迭代器

a = np.arange(9).reshape(3,3) 
print ('原始数组:')
for row in a:
    print (row)
 
#对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print ('迭代后的数组:')
for element in a.flat:
    print (element)
    
    
原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8

位运算

函数描述
bitwise_and对数组元素执行位与操作
bitwise_or对数组元素执行位或操作
invert按位取反
left_shift向左移动二进制表示的位
right_shift向右移动二进制表示的位
a,b = 13,17 
print ('13 和 17 的二进制形式:')
print (bin(a), bin(b))
 
print ('13 和 17 的位或:')
print (np.bitwise_or(13, 17))

13 和 17 的二进制形式:
0b1101 0b10001
13 和 17 的位或:
29

字符串函数

函数描述
add()对两个数组的逐个字符串元素进行连接
multiply()返回按元素多重连接后的字符串
center()居中字符串
capitalize()将字符串第一个字母转换为大写
title()将字符串的每个单词的第一个字母转换为大写
lower()数组元素转换为小写
upper()数组元素转换为大写
split()指定分隔符对字符串进行分割,并返回数组列表
splitlines()返回元素中的行列表,以换行符分割
strip()移除元素开头或者结尾处的特定字符
join()通过指定分隔符来连接数组中的元素
replace()使用新字符串替换字符串中的所有子字符串
decode()数组元素依次调用str.decode
encode()数组元素依次调用str.encode

数学函数

  • NumPy 提供了标准的三角函数:sin()、cos()、tan()。

  • numpy.around() 函数返回指定数字的四舍五入值。

  • numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。

  • numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。

算数函数

  • NumPy 算术函数包含简单的加减乘除:add()subtract()multiply()divide()
  • numpy.reciprocal() 函数返回参数逐元素的倒数。
  • numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
  • numpy.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。

统计函数

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

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

  • numpy.ptp()函数计算数组中元素最大值与最小值的差(最大值 - 最小值)。

  • numpy.percentile()百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。

  • numpy.median() 函数用于计算数组 a 中元素的中位数(中值)

  • numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。

  • numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×