目录
文章目录
一、numpy概述
- Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
- Numpy是其它数据分析及机器学习库的底层库。
- Numpy完全标准C语言实现,运行效率充分优化。
- Numpy开源免费。
官方文档: https://www.numpy.org
官方中文文档: https://www.numpy.org.cn/
1. numpy历史
- 1995年,Numeric,Python语言数值计算扩充。
- 2001年,Scipy->Numarray,多维数组运算。
- 2005年,Numeric+Numarray->Numpy。
- 2006年,Numpy脱离Scipy成为独立的项目。
2. numpy的核心:多维数组
- 代码简洁:减少Python代码中的循环。
- 底层实现:厚内核©+薄接口(Python),保证性能。
二、numpy基础
1. ndarray数组
用np.ndarray类的对象表示n维数组
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary))
1)内存中的ndarray对象
元数据(metadata)
存储对目标数组的描述信息,如:dim count、dimensions、dtype、data等。
实际数据
完整的数组数据
将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9MMpxi5n-1638019422028)(./img/ndarray_struct.png)]
2)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)
np.ones_like(类数组)
np.zeros_like(类数组)
import numpy as np
a = np.arange(10).reshape(2, 5)
print(a)
b = np.ones_like(a)
print(b)
c = np.zeros_like(a)
print(c)
4)ndarray对象属性的基本操作
**数组的维度:**np.ndarray.shape
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary), ary, ary.shape)
#二维数组
ary = np.array([
[1,2,3,4],
[5,6,7,8]
])
print(type(ary), ary, ary.shape)
**元素的类型:**np.ndarray.dtype
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary), ary, ary.dtype)
#转换ary元素的类型
b = ary.astype(float)
print(type(b), b, b.dtype)
#转换ary元素的类型
c = ary.astype(str)
print(type(c), c, c.dtype)
**数组元素的个数:**np.ndarray.size
import numpy as np
ary = np.array([
[1,2,3,4],
[5,6,7,8]
])
#观察维度,size,len的区别
print(ary.shape, ary.size, len(ary))
5)ndarray对象的dtype属性的值
Numpy的内部基本数据类型
类型名 | 类型表示符 | 类型代码 |
---|---|---|
布尔型 | bool_ | ? |
有符号整数型 | int8(-128~127)/int16/int32/int64 | i1/i2/i4/i8 |
无符号整数型 | uint8(0~255)/uint16/uint32/uint64 | u1/u2/u4/u8 |
浮点型 | float16/float32/float64 | f2/f4/f8 |
复数型 | complex64/complex128 | C8/c16/c32 |
字节串型 | bytes_(兼容:Python字节) | S# |
字符串型 | str_(兼容:Python unicode)4字节 | ‘U#’ |
日期时间 | np.datetime64 | M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s] |
自定义复合类型
若希望ndarray中存储对象类型,numpy建议使用元组存储对象的属性字段值,然后把元组添加到ndarray中,ndarray提供了语法方便的处理这些数据。
# 自定义复合类型
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')
print(a)
print(a[0]['f0'], ":", a[1]['f1'])
第二种设置dtype的方式
b = np.array(data, dtype=[
('name', 'str_', 2),
('scores', 'int32', 3),
('ages', 'int32', 1)
])
print(b[0]['name'], ":", b[0]['scores'])
第三种设置dtype的方式
c = np.array(data, dtype={
'names': ['name', 'scores', 'ages']