Numpy介绍
- Numpy是一个开源的Python科学计算库,
用于快速处理任意维度的数组
。 - Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
通过python的list嵌套也可以实现多维数组,为什么还要使用ndarray?
对比ndarray和原生python列表的计算速度
import random
import time
import numpy as np
a = []
# 随机100000000数字放到列表
for i in range(100000000):
a.append(random.random())
t1 = time.time()
# 计算求和的时间
sum1=sum(a)
t2=time.time()
# 同样的数组转成ndarray
b=np.array(a)
t4=time.time()
# 计算求和时间
sum3=np.sum(b)
t5=time.time()
print(t2-t1, t5-t4)
为什么ndarray速度快?
ndarray和list在内存中的地址对比:
总结:
- ndarray在内存中的地址是连续的,批量操作数组元素时速度更快
- python原生list只能通过寻址方式找到下一个元素,这虽然也导致了在通用性方面Numpy的ndarray不及Python原生list,但计算的时候速度就慢了
- ndarray支持并行化运算
- Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码
ndarray的属性
shape
属性,数组维度的元组:
a = np.array(
[[1,2,3],
[4,5,6]]
)
b = np.array(
[1,2,3,4]
)
c = np.array(
[[
[1,2,3],
[4,5,6]
],[
[1,2,3],
[4,5,6]
]]
)
ndim
属性,查看维数(几维数组):size
属性,查看元素总数量:
4. dtype
属性,查看数组的数据类型:
adarray的数据类型
名称 | 描述 |
np.bool | 用一个字节存储的布尔类型(True或False) |
np.int8 | 一个字节大小,-128 至 127 |
np.int16 | 整数,-32768 至 32767 |
np.int32 | 整数,-2 31 至 2 32 -1 |
np.int64 | 整数,-2 63 至 2 63 - 1 |
np.uint8 | 无符号整数,0 至 255 |
np.uint16 | 无符号整数,0 至 65535 |
np.uint32 | 无符号整数,0 至 2 ** 32 - 1 |
np.uint64 | 无符号整数,0 至 2 ** 64 - 1 |
np.float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 |
np.float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 |
np.float64 | 双精度浮点数:64位,正负号1位,指数11位,精度52位 |
np.complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
np.complex128 | 复数,分别用两个64位浮点数表示实部和虚部 |
np.object_ | python对象 |
np.string_ | 字符串 |
np.unicode_ | unicode类型 |
创建数组时指定类型: