机器学习-Numpy工具包
1.概述
导入包:
import numpy as py
先转换为numpy.ndarray,在进行加1操作
例如:
array = [1,2,3,4,5]
array +1
这样无法进行矩阵所有元素加1的操作,正确的操作如下:
array = np.array([1,2,3,4,5])
print (type(array))
array2 = array + 1
array2
这样我们就可以将array的数组内的所有元素加1后给array2这个数组,数组是最底层可以进行一些操作,对于list是不可以的。
数组可以相加,但是要求元素的个数相同,例如:
array2 + array
array2 * array
这样就是对应元素相乘或相加即可
也可以取出某一个元素,直接应角标即可。
元素个数的操作如下:
array.shape
二维矩阵
np.array([[1,2,3],[4,5,6]])
查大小和一维一样
ndarray结构来说,里面的所有元素必须是同一类型的,如果不是的话则会自动的向下转换
ndarray基本属性操作
type(名称)
tang_array.dtype
tang_array.itemsize
tang_array.ndim 代表维度
tang_array.fill(0)
索引与切片
tang_list=[1,2,3,4,5]
tang_array = np.array(tang_list)
tang_array[0]
tang_array[1:3] 从左取到右,不包括右
tang_array[-2:] 从后数开始取,什么都没写,取所有的,此例子是从倒数第二个开始取,取到最后
矩阵
tang_array = np.array([[1,2,3],[4,5,6],[7,8,9]])
tang_array.shape 代表矩阵的大小
tang_array.size 代表矩阵元素的个数
tang_array.ndim 代表矩阵的维度
tang_array[1,1]=10 将第一行第一列的值变为10
tang_array[1] 取出第一行
tang_array[:,1] 取所有的第一维的第二位
tang_array2 = tang_array
tang_array2[1,1]=100
发现都改变了,做等号是相当于同一个区域
tang_array2 = tang_array.copy() 这样可以实现赋值操作,改2不改1
生成数据
tang_array = np.arrange(0,100,10) 从0到100,以10位间隔,不包括100
mask = np.array([0,0,0,0,0,0,1,1,1,1],dtype=bool) 设置数据类型
tang_array[mask] 拿出数组里的不同类别
random_array = np.random.rand(10) 打印10个随机值
mask = random_array > 0.5 输出是true或false
tang_array = np.array([10,20,30,40,50])
tang_array > 30
np.where(tang_array) > 30 所有满足的索引即位置
tang_array[np.where(tang_array > 30)]
数据类型
tang_array = np.array([1,2,3,4,5],dtype = np.float32)
tang_array = np.array([1,10,3,5,'str'],dtype=np.object) 出现字符串不能指定int或float类型
tang_array.astype(np.float32) 改变数据类型
数值计算
import numpy as np
tang_array = np.array([[1,2,3],[4,5,6]])
np.sun(tang_array) 矩阵求和
指定维度:np.sum(tang_array.axis = 0) 0竖着 1横着
tang_array.min(axis = 0) 取最小值
tang_array.max() 取最大值
tang_array.argmin() 找最小值的索引
tang_array.argmin(axis = 0) 找最小值的索引
tang_array.argmax() 找最大值的索引
tang_array.mean()
tang_array.std() 标准差
tang_array.var() 方差
tang_array.clip(2,4) 从2开始到4结束,所有小于2变为2,大于4的变为4
tang_array.round () 四舍五入
tang_array.round (decimals = 1) 保留小数
排序操作
import numpy as np
tang_array = np.array([[1.5,1.3,7.5],[5.6,7.8,1.2]])
np.sort(tang_array) 按照每一行的从小到大
np.sort(tang_array,axis = 0) 按照列从小到大
np.argsort(tang_array) 排序的索引
tang_array = np.linspace(0,10,10) 从a开始到b截止,构建10个数据
values = np.array([2.5,6.5,9.5])
np.searchsorted(tang_array ,values) 返回结果是在的位置
tang_array = np.array([[1,0,6],[1,7,0],[2,3,1],[2,4,0]])
index = np.lexsort([-1*tang_array[:,0],tang_array[:,2]]) 降序默认为-1 第一列降序第三列升序
数组形状
import numpy as np
np.array = np.arange(10)
tang_array.shape 元素个数
tang_aray.shape = 2,5 元素变成2*5的矩阵
tang_array.reshape(1,10)
元素个数不能变 tang_aray.shape = 3,4 是不可以的
tang_array = np.arange(10)
tang_array.shape
tang_array = tang_array[np.newaxis,:] 加维度
tang_array = tang_array.squeeze() 压缩
tang_array .transpose() 转置
a = np.array([[123,456,789],[3214,456,134]])
b = np.array([[1235,3124,432],[43,13,134]])
c = np.ocncatenate((a,b))
将a和b在一起,b连在a的后面
c = np.ocncatenate((a,b),axis = 1) 横着进行拼接
a.flatten 拉长矩阵
数组生成
import numpy as np
np.array([1,2,3])
np.arange(l,r,k) 从l开始到r结束以k为间隔增加,不含r
np.logspace(0,1,5)
np.zeros(3) 3位向量维度
np,zeros(3,3)
np.ones((3,3)) * 8 全是8
a = np,empty(6)
a.fill(1)
np.zeros_like(tang_Array) 构造一个相同的维度
运算
import numpy as np
x = np,array([5,5])
y = np.array([2.2])
np.mulitiply 对应元素相乘
np.dot(x,y) 是1维的时候执行的是內积计算,传进去的是二维的话就是矩阵乘法计算
x = np.array([1,1,1,4])
np.logival_and(x,y)
np.logival_or(x,y)
np.logival_not(x,y) &|!操作
随机模块
import numpy as np
np.random.rand(3,2) 随机构造一个3*2的矩阵
np.random.randint(10,size = (5,4))
np.random.random_sample()
np.random.randint(0,10,3)
mu,sigma = 0,0.1
np.random.normal(mu,sigma,10) 高斯
np.set_printoptions(precision = 2) 精度
np.random.shuffle(tang_array) 数据打乱
np.random.seed(100) 随机的种子
读写模块
data = np.loadtxt('tang.txt')
data = np.loadtxt('tang.txt',delimiter = ',',skiprows = 1)
读取array结构
tang_array = np.array([[1,2,3],[4,5,6]])
np.save('tang_array.npy',tang_array)
tnag = np.load('tang_array.npy')
tang_array2 = np.arange(10)