pythonnumpy模块_python模块 - numpy

numpy - 基础数组操作

基础

数据分析及机器学习底层库,C语言实现,提供基础数值计算

核心是多维数组的操作,减少python对多维数组操作时的循环

numpy.ndarray类表示n维数组类

ndarray对象在内存中储存内容

元数据:描述数组信息,如ndim、dimensions、dtype、data等

实际数据:和元数据分离,一定程度减少实际数据访问,提高性能

特点

同质性:数组所有元素必须是相同类型

数组下标:从0开始

array对象

数据类型

类型

符号

字符码(进行类型转换,自定义符合类型标注)

布尔

bool_

?

有符号整数

int8(-128~127)/int16/32/64

i1/i2/i4/i8

无符号整数

uint8(0~255)/uint16/32/64

u1/u2/u4/u8

浮点数

float/16/32/64

f2/f4/f8

复数

complex64/128

c8/c16

字符串

str_

U

日期

datetime64

M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s]

日期 datetime64

常见格式:‘年‘, ‘年-月-日‘, ‘年-月-日 时:分:秒‘

规范化:可对不同精确度的时间精确到统一时间单位 array.astype(‘M8[Y/M/D/h/m/s]‘)

可进行减操作得到时间差,精确到数据中最小时间单位

自定义复合类型

# 实例

data=[

(‘zs‘, [90, 80, 85], 15),

(‘ls‘, [92, 81, 83], 16),

(‘ww‘, [95, 85, 95], 15)

]

# 方法一:字符串对应每条数据格式

# 创建

a = numpy.array(data,dtype=‘U3, 3int32, int32‘)

# 访问

a[0][‘f0‘] # ‘zs‘

# 方法二:字典对应每条数据字段名称

# 创建

c = np.array(data, dtype={‘names‘: [‘name‘, ‘scores‘, ‘ages‘],

‘formats‘: [‘U3‘, ‘3int32‘, ‘int32‘]})

# 访问

c[0][‘name‘] # ‘zs‘

# 方法三:列表对应每条数据字段名称

# 创建

b = np.array(data, dtype=[(‘name‘, ‘str_‘, 2),

(‘scores‘, ‘int32‘, 3),

(‘ages‘, ‘int32‘, 1)])

# 访问

b[0][‘name‘] # ‘zs‘

创建:

numpy.array([]) 普通一维数组

numpy.arange(start,end,step) 从起始值到终止值按指定步长生成数组

numpy.zeros(count,dtype=‘类型‘) 生成count个0组成的一维数组

numpy.ones(count,dtype=‘类型‘) 生成count个1组成的一维数组

属性

可查看和修改部分属性

维度(每层元素个数) array.shape

维数 array.ndim

元素类型 array.dtype

个数类

总元素个数 array.size [[1,2],[3,4]]的size为4

最外层元素数 len(array) [[1,2],[3,4]]的len为2

元素字节数 itemsize

总字节数 nvytes

复数

实数部 real

虚数部 iamg

迭代器 flat

array[索引] [0][0][0]==[0,0,0]

操作

偏移缩放转置:

每个元素进行相同操作

+、-、*、/、**、T

遍历(扁平迭代器)

elem for elem in a.flat

类型转换:

array.astype(type) 类型强制转换

变维:

就地变维:改变源数据格式

视图变维:数据不同展示形式

复制变维:复制出新的独立数据

变维类型

方法

描述

数据是否共享

就地变维

shape()

转为指定格式,无返回值

共享(本身)

就地变维

resize()

转为指定格式,无返回值

共享(本身)

视图变维

reshape()

转为指定格式,返回新数组对象

共享(同一数据)

视图变维

reval()

退化为一维,返回新数组对象

共享共享(同一数据)

复制变维

flatten()

退化为一维,返回新数组对象

不共享(不同数据)

array1 = numpy.arange(1,9) # 1*8 一维数组

array1.shape(2,4) # 2*4 二维数组

array1.resize(2,4) # 2*4 二维数组

array2 = array1.reshape(2,4) # 2*4 二维数组

array1 = numpy.arange(1,9) # 1*8 一维数组

array1.shape(2,2,2) # 2*2*2 三维数组

array1.resize(2,2,2) # 2*2*2 三维数组

array3 = array1.reshape(2,2,2) # 2*2*2 三维数组

array4 = array3.reval() # 1*8 一维数组

array1 = numpy.arange(1,9) # 1*8 一维数组

array5 = array1.flatten() # 1*8 一维数组

array1,array2,array3,array4 共享数据

array5 独立数据

案例:

生成3*3*3的三维数组,元素为1到27

array1 = numpy.arange(1,28).resize(3,3,3)

切片:

array([start: end: step,start: end: step,start: end: step])根据维度切出指定页行列

# 一维数组

a = numpy.arange(1, 10)

# 1 2 3 4 5 6 7 8 9

# 正序

print(a[::]) # 1 2 3 4 5 6 7 8 9

print(a[:]) # 1 2 3 4 5 6 7 8 9

# 倒序

print(a[::-1]) # 9 8 7 6 5 4 3 2 1

# 省略start,倒推到边界,step=1就end-1倒推,step=-1就end+1倒推

print(a[:4:-1]) # 9 8 7 6 相当于[8:4:-1]

print(a[:-4:-1]) # 9 8 7 相当于[-1:-4:-1]

# 省略end,正推到边界,step=1就start+1正推,step=-1就start-正推

print(a[7::-1]) # 8 7 6 5 4 3 2 1 相当于[7:-1:-1]

print(a[-7::-1]) # 3 2 1 相当于[-7:-10:-1]

掩码:根据指定条件进行筛选

array = numpy.arange(1, 5)

mask = [True, False,True, False,True]

print(array[mask])

# array([1,3,5])

print(array[array>3])

# array([4,5])

print(array>3)

# array([False, False,True, True,True])

合并拆分

水平方向

合并 c = numpy.hstack((a,b))/row_stack((a,b))

等分a,b = numpy.hsplit(c,2)

a = numpy.arange(1,1+6).reshape(2,3)

# array([[1,2,3],

# [4,5,6]])

b = numpy.arange(1+6,1+12).reshape(2,3)

# array([[7,8,9],

# [10,11,12]])

c = numpy.hstack((a,b))

# array([[1,2,3,7,8,9],

# [4,5,6,10,11,12]])

d,e = numpy.hsplit(c,2)

# d同a,e同b

垂直方向

合并c = numpy.vstack((a,b))/column_stack((a,b))

等分a,b = numpy.vsplit(c,2)

a = numpy.arange(1,1+6).reshape(2,3)

# array([[1,2,3],

# [4,5,6]])

b = numpy.arange(1+6,1+12).reshape(2,3)

# array([[7,8,9],

# [10,11,12]])

c = numpy.vstack((a,b))

# array([[1,2,3],

# [4,5,6],

# [7,8,9],

# [10,11,12]])

d,e = numpy.vsplit(c,2)

# d同a,e同b

深度方向

合并c = numpy.dstack((a,b)),等分a,b = numpy.dsplit(c,2)

a = numpy.arange(1,1+6).reshape(2,3)

# array([[1,2,3],

# [4,5,6]])

b = numpy.arange(1+6,1+12).reshape(2,3)

# array([[7,8,9],

# [10,11,12]])

c = numpy.dstack((a,b))

# array([[[1,7],

# [2,8],

# [3,9]],

# [[4,10],

# [5,11],

# [6,12]]])

d,e = numpy.dsplit(c,2)

# array([[[1],

# [2],

# [3]],

# [[4],

# [5],

# [6]]])

通用方法

合并c = numpy.concatenate((a,b),axis=0)

等分a,b = numpy.dsplit(c,2,,axis=0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值