python之Numpy详解

numpy

拥有广播机制, 通过扩展数组的方法来实现相加、相减、相乘等操作 。可以条件掩码,也可以索引掩码。

创建ndarray数组

a = np.array([1, 2, 3, 4, 5, 6])
np.arange(起始值(0),终止值,步长(1))
a = np.arange(0, 5, 1)
b = np.arange(0, 10, 2)
np.zeros(数组元素个数, dtype='类型')
a = np.zeros(10)
np.ones(数组元素个数, dtype='类型')
a = np.ones(10)
np.ndarray.shape  # 数组的维度
np.ndarray.dtype  # 元素的类型
np.ndarray.size   # 数组元素的个数

数据类型

类型名类型表示符
布尔型bool_
有符号整数型int8(-128~127) / int16 / int32 / int64
无符号整数型uint8(0~255) / uint16 / uint32 / uint64
浮点型float16 / float32 / float64
复数型complex64 / complex128
字串型str_,每个字符用32位Unicode编码表示

复合数据类型数组

# 自定义复合类型
import numpy as np

data=[('zs', [90, 80, 85], 15),
	('ls', [92, 81, 83], 16),
	('ww', [95, 85, 95], 15)]
#第一种设置dtype的方式
a = np.array(data, dtype='U3, 3int32, int32')
#第二种设置dtype的方式
b = np.array(data, dtype=[('name', 'str_', 2), ('scores', 'int32', 3), 
                          ('ages', 'int32', 1)])
#第三种设置dtype的方式
c = np.array(data, dtype={'names': ['name', 'scores', 'ages'],
                    'formats': ['U3', '3int32', 'int32']})
#测试日期类型数组
f = np.array(['2011', '2012-01-01', '2013-01-01 01:01:01','2011-02-01'])
f = f.astype('M8[D]')
f = f.astype('int32')

数据变维

# 视图变维(数据共享):
reshape() 与 ravel() 
b = a.reshape(2, 4)	#视图变维  : 变为2行4列的二维数组
d = c.ravel()	#视图变维	变为1维数组
# 复制变维(数据独立):
flatten()
e = c.flatten()
M=e.reshape(2,10)
# 就地变维:直接改变原数组对象的维度,不返回新数组
a.shape = (2, 4)
a.resize(2, 2, 2)

多维数组的组合与拆分

垂直方向操作:

import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
# 垂直方向完成拆分操作,生成两个数组
d, e = np.vsplit(c, 2)

水平方向操作:

# 水平方向完成组合操作,生成新数组 
c = np.hstack((a, b))
# 水平方向完成拆分操作,生成两个数组
d, e = np.hsplit(c, 2)

深度方向操作:(3维)

# 深度方向(3维)完成组合操作,生成新数组
i = np.dstack((a, b))
# 深度方向(3维)完成拆分操作,生成两个数组
k, l = np.dsplit(i, 2)

长度不等的数组组合:

import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4])
# 填充b数组使其长度与a相同
# pad_width是在各维度的各个方向上想要填补的长度,前面填充0位,后面填充一位,值为-1
b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))

多维数组组合与拆分的相关函数:

# 通过axis作为关键字参数指定组合的方向,取值如下:
# 若待组合的数组都是二维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
# 若待组合的数组都是三维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
#	2: 深度方向组合
np.concatenate((a, b), axis=0)
# 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
np.split(c, 2, axis=0)

数组的掩码操作

# 可以索引掩码,也可以数据掩码
import numpy as np
a = np.arange(1, 10)
mask = [True, False,True, False,True, False,True, False,True, False]
res = a[mask]

数组计算通用函数

np.add(a, a) 		# 两数组相加
np.add.reduce(a) 	# 返回一个累加和
np.add.accumulate(a) 	# 返回累加和过程
np.prod(a)   #返回数组累积值
np.cumprod(a)  #返回数组累乘的过程数组
np.add.outer([10, 20, 30], a)	 # 外和
np.outer([10, 20, 30], a)  #外积

数组取整通用函数

np.divide(a, b) 	#  a 除 b的值
np.floor(a / b)		# (结果向下取整)
np.ceil(a / b) 		# (结果向上取整)
np.trunc(a / b)		# (结果截断取整)
np.round(a / b)	    # (四舍五入取整)
numpy是一个开源的Python科学计算库,它提供了一个强大的多维数组对象和用于处理这些数组的函数。下面是关于numpy模块的详细解释: 1. 数组numpy最重要的特性之一是它的数组对象(numpy.ndarray)。这是一个由相同类型的元素组成的多维容器。数组可以是一维、二维、三维等等,并且可以包含整数、浮点数、复数等不同类型的数据。 2. 数组操作:numpy提供了一系列用于操作数组的函数和方法。你可以进行基本的数学运算(加、减、乘、除等)、统计计算(平均值、标准差等)、逻辑运算(与、或、非等)以及数组的切片、索引等操作。 3. 广播:numpy的广播功能使得不同形状的数组之间的运算成为可能。它可以自动调整不同形状数组的大小,使得它们能够进行元素级别的运算。 4. 矩阵操作:numpy还提供了许多矩阵操作的函数和方法。你可以进行矩阵的转置、求逆、乘法、求特征值和特征向量等操作。 5. 随机数生成:numpy包含了一个random子模块,用于生成各种类型的随机数。你可以生成服从特定分布(如正态分布、均匀分布等)的随机数,并进行各种随机抽样操作。 6. 文件操作:numpy可以读取和写入数组数据到磁盘。它支持多种数据格式,包括文本文件、二进制文件和压缩文件。 总之,numpy提供了丰富的功能和高效的数组操作,使得Python成为一种强大的科学计算语言。它在数据分析、机器学习、图像处理等领域广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值