python numpy数值算法

本文详细介绍Numpy库,涵盖其历史、核心功能、数组创建、属性操作、维度与索引处理,以及数组的组合与拆分技巧。Numpy是Python中高性能数值计算的基础库。

numpy概述: Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。Numpy是其它数据分析及机器学习库的底层库。Numpy完全标准C语言实现,运行效率充分优化。Numpy开源免费。

 numpy历史:

1995年,Numeric,Python语言数值计算扩充。2001年,Scipy->Numarray,多维数组运算;

2005年,Numeric+Numarray->Numpy。2006年,Numpy脱离Scipy成为独立的项目。

 numpy的核心:多维数组

代码简洁:减少Python代码中的循环。
底层实现:厚内核(C)+薄接口(Python),保证性能。

一, ndarray数组

1,用np.ndarray类的对象表示n维数组
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary))

2,内存中的ndarray对象

存储对目标数组的描述信息,如:ndim、dimensions、dtype、data等。

将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。

 ndarray数组对象的特点:Numpy数组是同质数组,即所有元素的数据类型必须相同。 Numpy数组的下标从0开始,最后一个元素的下标为数组长度减1

 3,ndarray数组对象的创建

np.array(任何可被解释为Numpy数组的逻辑结构)
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
print(a)
 

np.arange(起始值(0),终止值,步长(1))
import numpy as np
a = np.arange(0, 5, 1)
print(a)
b = np.arange(0, 10, 2)
print(b)
 

np.zeros(数组元素个数, dtype='类型')
import numpy as np
a = np.zeros(10)
print(a)
 

np.ones(数组元素个数, dtype='类型')
import numpy as np
a = np.ones(10)
print(a)

二, ndarray对象属性的基本操作

1,数组的维度:**np.ndarray.shape      

2,元素的类型:**np.ndarray.dtype

3,数组元素的个数:**np.ndarray.size
import numpy as np
ary = np.array([ [1,2,3,4], [5,6,7,8] ])

4,数组元素索引(下标)

数组对象[..., 页号, 行号, 列号]

下标从0开始,到数组len-1结束。

三,ndarray对象属性操作详解

1,Numpy的内部基本数据类型

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


2,自定义复合类型

#测试日期类型数组
f = np.array(['2011', '2012-01-01', '2013-01-01 01:01:01','2011-02-01'])
f = f.astype('M8[D]')
f = f.astype('i4')
print(f[3]-f[0])

f.astype('bool')

3,类型字符码

| 类型                  | 字符码                              |
| -----------------     | ----------------------------------- |
| np.bool_            | ?                                   |
| np.int8/16/32/64  | i1 / i2 / i4 / i8                   |
| np.uint8/16/32/64 | u1 / u2 / u4 / u8                   |
| np.float/16/32/64 | f2 / f4 / f8                        |
| np.complex64/128  | c8 / c16                            |
| np.str_                    | U                                   |
| np.datetime64        | M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s] |

**字节序前缀,用于多字节整数和字符串:**
`</>/[=]分别表示小端/大端/硬件字节序。`

**类型字符码格式**

<字节序前缀><维度><类型><字节数或字符数>

| 3i4      | 释义                                                                 |
| -------- | ------------------------------------------------------------ |
| 3i4      | 大端字节序,3个元素的一维数组,每个元素都是整型,每个整型元素占4个字节。 |
| <(2,3)u8 | 小端字节序,6个元素2行3列的二维数组,每个元素都是无符号整型,每个无符号整型元素占8个字节。 |
| U7       | 包含7个字符的Unicode字符串,每个字符占4个字节,采用默认字节序。 |

四, ndarray数组维度操作

1,视图变维(数据共享): reshape() 与 ravel()

2,复制变维(数据独立):flatten()

3,就地变维:直接改变原数组对象的维度,不返回新数组
a.shape = (2, 4)
print(a)
a.resize(2, 2, 2)
print(a)
 

五,ndarray数组索引操作
# 数组对象切片的参数设置与列表切面参数类似
#  步长+:默认切从首到尾
#  步长-:默认切从尾到首
数组对象[起始位置:终止位置:步长, ...]
# 默认位置步长:1

六,多维数组的切片操作

ndarray数组的掩码操作

七,多维数组的组合与拆分

1,垂直方向操作:
,

2,水平方向操作:

3,深度方向操作:(3维)

4,长度不等的数组组合:

5,多维数组组合与拆分的相关函数:
 通过axis作为关键字参数指定组合的方向,取值如下:
 若待组合的数组都是二维数组:

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

6,简单的一维数组组合方案

7, ndarray类的其他属性

- shape - 维度
- dtype - 元素类型
- size - 元素数量
- ndim - 维数,len(shape)
- itemsize - 元素字节数
- nbytes - 总字节数 = size x itemsize
- real - 复数数组的实部数组
- imag - 复数数组的虚部数组
- T - 数组对象的转置视图
- flat - 扁平迭代器,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值