数据分析之Numpy
一、Numpy 数值计算库
(一)ndarray
- n - 任意个
- d - dimension 维度
- array - 数组
ndarray
- 存储风格:【ndarray 相同类型】【list - 不同类型 】
- 并行化运算: ndarray支持向量化运算
- 底层语言:C语言,解除了GIL
(二)ndarray属性、方法
1.属性
ndarray.shape #大小(几行几列)
ndarray.ndim #维度(几维)
ndarray.size #多少个元素
ndarray.itemsize #每个元素的大小
ndarray.dtype #元素的数据类型
2.方法
- ndarray形状修改
#返回新的ndarray,原始数据没有改变
data.reshape((10, 8))
#没有返回值,对原始的ndarray进行了修改
data.resize((10, 8))
#转置 行变成列,列变成行
data.T
- ndarray类型修改
data.astype("int32")
data.tostring()#序列化到本地
- 统计指标:【min, max, mean, median, var, std】
- np.函数名
data.max(axis=0)
(三)numpy.函数名()
1. numpy创建ndarray
- 1 生成0和1的数组
np.zeros(shape=(3, 4), dtype="float32")
np.ones(shape=[2, 3], dtype=np.int32)
np.eye(4)
- 2 从现有数组中生成
np.array([1.1, 2.2, 3.3], dtype="float32")
np.array([1.1, 2.2, 3.3], dtype=np.float32)
data1 = np.array(score) #深拷贝
data2 = np.asarray(score)#浅拷贝
data3 = np.copy(score)#深拷贝
- 3 生成固定范围的数组
np.linspace(0, 10, 5) #5是数据个数
np.arange(0, 11, 5) #5是步长
- 4 生成随机数组
# 均匀分布
data1 = np.random.uniform(low=-1, high=1, size=1000000)
# 正态分布
data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)
data3 = np.random.normal(0, 1, (10, 5))
2. 数组的去重
np.unique(temp)
set(data)
3. 逻辑运算
# 1 逻辑判断, 如果大于0.5就标记为True 否则为False
data > 0.5 # 如果大于0.5就标记为True 否则为False;返回全数据的True/False矩阵
data[0:2, 0:5] > 0
# (data > 0.5) and (data < 1)
np.logical_and(data > 0.5, data < 1)
np.logical_or(data > 0.5, data < -0.5)
#判断是否有nan值
np.isnan(data)#返回全数据的True/False矩阵
np.all()【只要有一个False就返回False,只有全是True才返回True】
np.any()【只要有一个True就返回True,只有全是False才返回False】
data[data > 0.5] = 1.1 # 将逻辑判断为true的设置为1.1
np.all(stock_change[0:2, 0:5] > 0) # 判断是否全都符合条件,返回True/False
np.any(stock_change[:5, :] > 0) # 判断是否存在满足条件的数据,返回True/False
np.where(布尔值, True的位置的值, False的位置的值)
np.where(data > 0, 1, 0)
np.where(np.logical_or(data > 0.5, data < -0.5), 11, 3)
4. 统计运算
统计指标:【min, max, mean, median, var, std】
- np.函数名
- ndarray.方法名
data.max(axis=0)
np.max(data, axis=-1)
np.argmax(data, axis=-1) # 返回最大值、最小值所在位置
#np.argmin(temp, axis=)
5. 矩阵(matrix)
- 创建矩阵
weights_mat = np.mat([[0.3], [0.7]])
- 矩阵运算
# data, weights为2维数组
np.matmul(data, weights)
np.dot(data, weights)
# data_mat 、 weights_mat为矩阵
data_mat * weights_mat
data @ weights
6. 合并
- 数组合并
#水平方向合并(追加列)
np.hstack((a, b))
np.concatenate((a, b), axis=1)
#垂直合并(追加行)
np.vstack((a, b))
np.concatenate((a, b), axis=0)
7. Numpy读取
data = np.genfromtxt("test.csv", delimiter=",")
np.count_nonzero(data) # 统计数组中非零元素的个数