import random
import time
import numpy as np
a = []
for i in range(100000000):
a.append(random.random())
t1 = time.time()
sum1 = sum(a)
t2 = time.time()
b = np.array(a)
t4 = time.time()
sum2 = np.sum(b)
t5 = time.time()
print(t2-t1, t5-t4)
对比python自带求和函数和numpy的消耗的时间
numpy:
强大的N维数组对象
支持大量的数据运算
众多机器学习框架的基础库(Scipy/Pandas/sklearn/Tensorflow)
numpy快速的原因:
array默认的创建方式为“C-type” 以row为主在内存中排列
指定为“Fortran”,以column为主在内存中排列
2.支持并行化运算,即向量化运算
Numpy提供了一个N维数组类型的ndarray,描述了相同类型“items"的集合
每个items占用相同大小的内存块;每个item由单独数据类型对象指定的,可以为基本的类型
整数、浮点数等待,也可以为数据类型对象,表示数据结构
3.属性
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]]])
# 类型,大小,字节数
a.dtype # dtype('int64')
a.size # 元素的个数 6
a.nbytes # 总字节数 48
a.itemsize # 一个元素的长度
a.shape
b.shape
c.shape
数字的类型有:np.bool (布尔类型)
np.int8 np.int32 np.int64(整数)
np.uint8 np.uint16 np.unit32...(无符号数)
np.float16 np.float32 np.float64
np.complex64 np.complex128 复数
np.object_ python对象 np.sting_ 字符串 np.unicode_ unicode类型
a = np.array([[1,2,3],[4,5,6]], dtype=np.float32)
a.dtype
arr = np.array(['python','tensorflow','scikit-learn','numpy'],dtype = np.string_)
arr.dtype
# 自定义数据类型
mytype = np.dtype([('name', np.string_, 10), ('height', np.float64)])
arr = np.array([('Sarah', (8.0)), ('John', (6.0))], dtype=mytype)
arr
arr[0]['name']
随机生成500个股票两年的交易日涨幅数据
创建一个符合正态分布的500个股票,504天的涨跌情况
# 均值/标准差/维度
stock_day_rise = np.random.normal(0, 1, (500,504))
# 获取第一个股票的前10个交易日的涨跌幅度
stock_day_rise[0, 0:10]
# 行列转换
stock_day_rise.reshape([504, 500])
# 修改类型
stock_day_rise.reshape([504, 500]).astype(np.int32)
# 转置
stock_day_rise.T
# 三元运算符 np.where
np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
广播机制
数组之间运算,它们的shape在以下任意满足一个条件下可以进行数学运算:
1、维度相等 2、shape中,相对应的地方为1
矩阵(二维数组)
np.mat()
矩阵乘法
- mp.matmul 机制
(m行,n列)×(n行,L列)=(m行,L列)
a = np.array([[80,86],
[82,80],
[85,78],
[90,90],
[86,82],
[82,90],
[78,80],
[92,94]])
b = np.array([[0.7],[0.3]])
np.matmul(a, b)
我们需要工具去获取,但是Numpy其实并不适合IO操作,这是Numpy不方便的地方。