机器学习篇—Numpy数值计算基础(上)

Numpy库是支持 Python 语言的数值计算第三方库,其拥有强大的多维数组处理与矩阵运算能力;是机器学习的必不可少的工具。本文是在学习了Numpy数值计算课程之后,所做的些许笔记。

导入Numpy第三方库

导入numpy库

import numpy as np

查看数据类型

data.dtype

更改数据类型

data.astype(type)

生成Numpy数组几种方法

1.通过python内建对象列表、元组生成

np.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)
//object:列表或者元组
//dtype:数据类型。如果未给出,则类型为被保存对象所需的最小类型。
//copy:布尔类型,默认 True,表示复制对象。
//order:顺序。
//subok:布尔类型,表示子类是否被传递。
//ndmin:生成的数组应具有的最小维数。
//一般后面参数默认即可。
示例:
np.array([[6,7,8],[8,7,6]]) //通过列表创建ndarray数组
np.array([(6,7,8),(8,7,6)]) //通过元组创建ndarray数组
np.arange(start,stop,step,dtype=None)
//生成的为半开半闭区间
示例:
np.arange(6,8,1,'int64')
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
//start:序列的起始值。
//stop:序列的结束值。
//num:生成的样本数。默认值为50//endpoint:布尔值,如果为真,则最后一个样本包含在序列内。
//retstep:布尔值,如果为真,返回间距。
//dtype:数组的类型。
示例:
np.linspace(6,8,10,endpoint=True)
//创建全部为1的多维数组
np.ones(shape, dtype=None, order='C')
//shape:用于指定数组形状,例如(12)或 3//dtype:数据类型。
//order:{'C''F'},按行或列方式储存数组。
示例:
np.ones((3,3),order='F')
创建全部为0的多维数组,方法同上
np.zeros(shape, dtype=None, order='C')
通过np.eye创建二维数组
np.eye(N, M=None, k=0, dtype=<type 'float'>)
//N:输出数组的行数。
//M:输出数组的列数。
//k:对角线索引:0(默认)是指主对角线,正值是指上对角线,负值是指下对角线。
示例:
np.eye(6,6,k=3)
结果如下:
array([[0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

2.通过已知数据创建数组

//frombuffer(buffer):将缓冲区转换为 1 维数组。
//fromfile(file,dtype,count,sep):从文本或二进制文件中构建多维数组。
//fromfunction(function,shape):通过函数返回值来创建多维数组。
//fromiter(iterable,dtype,count):从可迭代对象创建 1 维数组。
//fromstring(string,dtype,count,sep):从字符串中创建 1 维数组。
示例(通过lambda表达式):
np.fromfunction(lambda a,b:a*b,(6,6))
结果:
array([[ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 0.,  2.,  4.,  6.,  8., 10.],
       [ 0.,  3.,  6.,  9., 12., 15.],
       [ 0.,  4.,  8., 12., 16., 20.],
       [ 0.,  5., 10., 15., 20., 25.]])
数组转置
data.T
data.transpose()
输出虚部
data.imag
输出实部
data.real
输出总数
data.size
输出单个元素的字节数
data.itemsize
输出总元素字节数
data.nbytes
输出数组维度
data.ndim //维度的英文dimension的缩写
输出形状
data.shape
输出每个维度中步进的字节数组
data.strides

1 维数组可以被看作数学中的向量,2 维数组可以看作是矩阵,而 3 维数组则是一个数据立方。

数组的基本操作

重设形状

np.arange(6).reshape((3, 2))

数组展开(扁平化为一维数组)

np.ravel(data, order='F'or'C')

轴移动

np.moveaxis(data, source, destination)
示例:
np.moveaxis(np.array([(1,2,3),(4,5,6)]),0,-1)
结果:
array([[1, 4],
       [2, 5],
       [3, 6]])

交换轴

a = np.ones((1, 6, 6))
a的结果:
array([[[1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1., 1.]]])
a=np.swapaxes(a, 0, 2)
a的结果变为:
array([[[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]],

       [[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]],

       [[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]],

       [[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]],

       [[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]],

       [[1.],
        [1.],
        [1.],
        [1.],
        [1.],
        [1.]]])

维度改变

numpy.atleast_1d()
numpy.atleast_2d()
numpy.atleast_3d()
示例:
print(np.atleast_1d([1, 2, 3]))
print(np.atleast_2d([4, 5, 6]))
print(np.atleast_3d([7, 8, 9]))
结果:
[1 2 3]//一维数据

[[4 5 6]]//二维数据

[[[7]
  [8]
  [9]]]//三维数据

维度转化

asarray(a,dtype,order):将特定输入转换为数组。
asanyarray(a,dtype,order):将特定输入转换为 ndarray。
asmatrix(data,dtype):将特定输入转换为矩阵。
asfarray(a,dtype):将特定输入转换为 float 类型的数组。
asarray_chkfinite(a,dtype,order):将特定输入转换为数组,检查 NaN 或 infs。
asscalar(a):将大小为 1 的数组转换为标量。
示例:
a=np.array([(1,2,3),(4,5,6)])
结果:
array([[1, 2, 3],
       [4, 5, 6]])
np.asmatrix(a)
结果:
matrix([[1, 2, 3],
        [4, 5, 6]]) //Matrix为矩阵英文单词

数组连接

np.concatenate((a1, a2, ...), axis=0)
示例:
a = np.array([[1, 2], [3, 4], [5, 6]])
结果:
array([[1, 2],
       [3, 4],
       [5, 6]])
b = np.array([[7, 8, 9]])
结果:
array([[7, 8, 9]])
b.T
结果:
array([[7],
       [8],
       [9]])

np.concatenate((a, b.T), axis=1)//此处需要保持连接数相等
结果:
array([[1, 2, 7],
       [3, 4, 8],
       [5, 6, 9]])

数组堆叠

stack(arrays,axis):沿着新轴连接数组的序列。
column_stack():将 1 维数组作为列堆叠到 2 维数组中。
hstack():按水平方向堆叠数组。
vstack():按垂直方向堆叠数组。
dstack():按深度方向堆叠数组。
示例:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.stack((a, b), axis=-1)//-1表示最后一个轴,在此处为列。
结果:
array([[1, 4],
       [2, 5],
       [3, 6]])

数组拆分:

split(ary,indices_or_sections,axis):将数组拆分为多个子数组。
dsplit(ary,indices_or_sections):按深度方向将数组拆分成多个子数组。
hsplit(ary,indices_or_sections):按水平方向将数组拆分成多个子数组。
vsplit(ary,indices_or_sections):按垂直方向将数组拆分成多个子数组。
示例:
a = np.arange(6)
np.split(a, 3)//axis参数表示拆分成的子数组个数
结果:
[array([0, 1]), array([2, 3]), array([4, 5])]

删除数组

delete(arr,obj,axis)
示例:
data=np.arrange(6).reshape(2,3)
结果:
array([[0, 1, 2],
       [3, 4, 5]])
np.delete(data,1,1)
结果:
array([[0, 2],
       [3, 5]])//第三个参数表示删除的是哪一个轴,第二个参数表示删除的是该轴的第几份数。

数组插入(与删除十分相似)

insert(arr,obj,values,axis)
示例:
a = np.arange(6).reshape(2, 3)
b = np.arange(3)
np.insert(a, 1, b, 0)
结果:
array([[0, 1, 2],
       [0, 1, 2],
       [3, 4, 5]])

附加数组

append(arr,values,axis) //需注意的是返回值为一维数组
示例:
a = np.arange(6).reshape(2, 3)
b = np.arange(3)
np.append(a, b)
array([0, 1, 2, 3, 4, 5, 0, 1, 2]) //返回一维数组
此时可以进行重构:
np.append(a,b).reshape(3,3)
结果:
array([[0, 1, 2],
       [3, 4, 5],
       [0, 1, 2]])

重设尺寸

resize(a,new_shape) //与reshape用法相同,但是区别在于,resize没有进行内存拷贝,直接改变了原数组。

翻转数组

fliplr(m):左右翻转数组。
flipud(m):上下翻转数组。
示例:
a=np.arange(6).reshape(2,3)
np.fliplr(a)
结果:
array([[2, 1, 0],
       [5, 4, 3]])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值