(本人小白一枚,刚刚开始学习python,自己总结理解的知识点,有误之处还请多多指教。)
numpy是一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
一、
1.下面是numpy的创建数组
import numpy as np #此处调用numpy库
arr1 = np.array([0.3, 0.5, 4.2]) # 创建一维数组
arr2 = np.array([[3, 4, 5], [4, 2, 1]]) # 创建二维数组
print(arr1)
print(arr2)
print(type(arr1))
运行结果:
2.numpy数组的基础属性
举例代码:
3.数组的向量化运算能力
# list1 ** 2 # 非法操作
print([i**2 for i in list1])
print(arr1 ** 2)
运行结果:
二、
1.利用arange函数创建数组
arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,两者的区别仅仅是arange返回的是一个数据,而range返回的是list。
arr3 = np.arange(0, 10)
arr4 = np.arange(10)
arr5 = np.arange(0, 1, 0.1)
print(arr3)
print(arr4)
print(arr5)
运行结果:
2.利用linspace函数创建数组
通过定义均匀间隔创建数值序列。其实,需要指定间隔起始点、终止端,以及指定分隔值总数(包括起始点和终止点);最终函数返回间隔类均匀分布的数值序列
arr6 = np.linspace(0, 1, 11)
print(arr6)
arr6 = np.linspace(0, 1, 11)
print(arr6)
运行结果:
3.利用zeros函数创建数组
arr7 = np.zeros([3, 4, 5])
print(arr7)
运行结果:
4.在创建数组时声明数据类型
arr8 = np.array([3, 4, 5], dtype=np.float32) # 在创建数组时,声明其数据类型
print(arr8)
print(arr8.dtype)
arr8[0] = 1.2
print(arr8)
print(np.int32(arr8)) # 转换数组的数据类型
运行结果:
三、
1.随机数的生成
print(np.random.random(10)) # 无约束条件下的随机数
print(np.random.rand(3, 4)) # 生成指定shape的均匀分布随机数
print(np.random.randn(2, 2, 3)) # 生成指定shape的正态分布随机数
运行结果:
2.数组的索引
在数组的索引中,如果是对一维数组的单个元素进行索引,可直接arr[0],若对多个元素进行索引,则需要切片。
# 一维数组的单个元素的索引
print(arr1[0])
print(arr1[-5])
# 一维数组的多个元素的索引(切片)
print(arr1[1:3])
print(arr1[-4:-2])
res1 = arr1[3]
res2 = arr1[3:4]
print(res1, res1.shape)
print(res2, res2.shape)
运行结果:
3.逻辑型索引
arr2 = np.array([2.3, 1.8, 4.5])
print(arr2)
print(arr2[[False, False, True]])
index = arr2 > 2
print(index)
print(arr2[index])
运行结果:
4.多维数组的索引
arr3 = np.arange(1, 13).reshape([3, 4]) #创建一个从[1-13),形状为3行4列的数组
print(arr3)
print(arr3[2, 3])
print(arr3[2, 0:]) #索引第三行index=2的全部元素
print(arr3[:, 0]) #索引全部行的第一列元素
print(arr3[1:3, 1:3]) #取第二行前三列元素与第二列前三行的元素之间的交集
print(arr3[2:, :]) # 注意返回值的shape
print(arr3[arr3[:, 0] > 4, :]) # 二维数组的逻辑型索引
运行结果:
5.修改数组中的元素
arr3 = np.arange(1, 13).reshape([3, 4])
print(arr3)
arr3[0, 0] = 15
print(arr3)
四、
1.求解距离矩阵
n = 100 # 样本个数
x = np.linspace(1, 100, n) # 样本的横坐标
y = np.linspace(1, 100, n) # 样本的纵坐标
dist = np.zeros([n, n]) # 初始距离矩阵
for i in range(n):
for j in range(n):
dist[i, j] = np.sqrt((x[i] - x[j])**2 + (y[i] - y[j])**2) # 计算欧式距离
print(x)
print(y)
print(dist)
运行结果:
2.数组形态的变化
arr4 = np.arange(1, 13)
print(arr4)
print(arr4.reshape([3, 4])) # 改变数组的shape
print(arr4.reshape([4, 3]))
arr5 = arr4.reshape([3, 4]) # 生成二维数组
print(arr5)
print(arr5.ravel()) # 数组展平
arr5.flatten()
arr6 = arr4.reshape([3, 4])
print(arr6)
print(np.vstack([arr5, arr6])) # 纵向组合
print(np.hstack((arr5, arr6))) # 横向组合
运行结果:
五、
1.掌握Numpy矩阵与通用函数
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
print(matr1)
print(type(matr1))
matr2 = np.matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(matr2)
print(type(matr2))
print(np.bmat('matr1 matr2; matr1, matr2')) # 矩阵拼接
print(matr1.T) # 矩阵的转置
print(matr1.I) # 矩阵的逆
运行结果:
今天就到这里,有关numpy矩阵与通用函数以及利用numpy进行数据分析的内容,我下次进行总结和分析(因为我现在也不太懂哈哈哈哈),感谢大家的支持与评价~我会继续努力的!