1.简介
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。
Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码
2. numpy 的基本使用
01 np.array() -- 创建ndarray n维数组
import numpy as np
score = np.array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
print(score)
print(type(score))
ndarray中所有元素的类型都是相同的, python中list的元素类型是任意的。
02 ndarray与Python原生list运算效率对比¶
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()
sum3=np.sum(b)
t5=time.time()
print(t2-t1, t5-t4) # 机器学习的最大特点就是大量的数据运算
03 ndarray的属性 & 类型
# ndarray的属性 --
# ndarray.shape: 数组维度的元组,
# ndarray.size: 数组中的元素数量,
# ndarray.dtype: 数组元素的类型 -- np.int64/np.int32/np.float64/np.float32/np.string_/np.unicode_/np.bool ...
# ndarray.ndim: 数组维数
# ndarray.itemsize:一个数组元素的长度(字节)
a = np.array([[1,2,3],[4,5,6]])
print(a.shape)
print(a.size)
print(a.dtype)
print(a.ndim)
print(a.itemsize)
b = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print("b --", b.shape, b.size, b.dtype, b.ndim, b.itemsize)
arr = np.array(['python', 'tensorflow', 'scikit-learn', 'numpy'], dtype = np.unicode_)
print(arr) # 若不指定,整数默认int64,小数默认float64
04 生成0和1的数组 -- zeros(shape[, dtype, order]), ones(shape[, dtype, order])
05 从现有数组生成 -- array & asarray & copy
a = np.array([[1,2,3],[4,5,6]])
a1 = np.array(a) # array: 从现有的数组当中创建一个新的数组
a2 = np.asarray(a) # asarray: 内存索引,并没有真正的创建一个新的
a3 = np.copy(a) # copy: 深拷贝,不会随着a改变而改变
a
06 生成固定范围的数组 -- linspace (start, stop, num, endpoint, retstep, dtype)
07 生成随机数组 -- np.random 均匀分布 & 正态分布
import numpy as ny
import matplotlib.pyplot as plt
%matplotlib inline
# 准备数据
a = np.random.uniform(low=-1, high=1, size=10000000)
# 创建画布,绘制直方图, 显示图像
plt.figure(figsize=(10, 5), dpi=80)
plt.hist(a, 1000)
plt.show()
08 ndarrary的基本操作
案例:随机生成3只股票2周的交易日涨幅数据
# 创建符合正态分布的8只股票10天的涨跌幅数据
stock_chang = np.random.normal(0, 1, (3, 10))
stock_chang
09 ndarray 运算
10 数组间运算
11 合并、分割 -- concatenate/hstack/vstack ; split
12 IO操作与数据处理 -- genfromtxt (了解,推荐pandas)
拓展:
1. 正态分布
正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的方差,所以正态分布记作N(μ,σ )。
2. 矩阵
矩阵,英文matrix,和array的区别矩阵必须是2维的,但是array可以是多维的。
矩阵乘法运算: 形状改变; 运算规则
总结
--- END ---