【机器学习】Numpy入门

目录

一、Numpy概述

二、ndarray数组创建

三、数组的索引和切片使用

四、数组形状的转换

五、常用的统计方法

六、数组的去重

七、数组的拆分与合并

八、其他说明


一、Numpy概述

numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

二、ndarray数组创建

ndarry:N维数组,元素数据类型必须相同。

其属性如下:

属性功能
dtype数组元素的类型
ndim数组的维度
shape数组的长度

下面是一些创建数组以及打印其属性的函数使用:

# -*- coding: utf-8 -*-

import numpy;

print '使用列表生成一维数组'
data = [1,2,3,4,5,6]
x = numpy.array(data)
print x #打印数组
print x.dtype #打印数组元素的类型

print '使用列表生成二维数组'
data = [[1,2],[3,4],[5,6]]
x = numpy.array(data)
print x #打印数组
print x.ndim #打印数组的维度
print x.shape #打印数组各个维度的长度。shape是一个元组

print '使用zero/ones/empty创建数组:根据shape来创建'
x = numpy.zeros(6) #创建一维长度为6的,元素都是0一维数组
print x
x = numpy.zeros((2,3)) #创建一维长度为2,二维长度为3的二维0数组
print x
x = numpy.ones((2,3)) #创建一维长度为2,二维长度为3的二维1数组
print x
x = numpy.empty((3,3)) #创建一维长度为2,二维长度为3,未初始化的二维数组
print x

print '使用arrange生成连续元素'
print numpy.arange(6) # [0,1,2,3,4,5,] 开区间
print numpy.arange(0,6,2)  # [0, 2,4]

三、数组的索引和切片使用

一维数组的使用与Python的列表索引基本相似。

二维数组的使用如下:

  1. a[1,1]与a[1][1]等价。
  2. a[1:2 , 2:4]取得是范围的数据,如果[:]表示在某个维度全取。
import  numpy as np

if __name__ == '__main__':
    np2arr = np.arange(24).reshape(4, 6)
    print(np2arr)

    #取值 np2arr[行,列]
    #取行
    print(np2arr[0,]) # 取第一行
    print(np2arr[1, :])

    #取列
    print(np2arr[:, 0]) #取第一列

    #取多行
    print(np2arr[[1, 2, 3],]) #
    # 取多列
    print(np2arr[1, [1, 2, 3]])
    #
    print(np2arr[1:3,1:4]) #取的是 矩阵的范围

    print(np2arr[[1,2,3], [1,2,3]])  #[ 7 14 21]  取多个值

四、数组形状的转换

import  numpy as np

if __name__ == '__main__':
    np_arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(np_arr)

    # sharp
    print(np_arr.shape)

    #1.修改 sharp
    '''
     size = sharp[0] * sharp[1]
    '''
    np_arr.shape = (3,2)
    print("--"*20)
    print(np_arr)
    print(np_arr.shape)

    # 2.修改 sharp
    np_arr2 = np.reshape(np_arr, (1, 6), order='C')
    np_arr3 = np.reshape(np_arr, (1, 6), order='F')
    np_arr4 = np.reshape(np_arr, (1, 6), order='A')
    print(np_arr2)
    print("--" * 20)
    print(np_arr)
    print("--" * 20)
    print(np_arr3)
    print("--" * 20)
    print(np_arr4)
    print("**" * 20)
    # 3.修改 sharp
    print(np_arr)
    print("**" * 20)
    np_arr5 = np_arr.reshape((1, 6))
    print(np_arr5)
    print("**" * 20)
    print(np_arr)
    print("**" * 20)

    # 4.修改 数组维度
    print(np_arr)
    print("**" * 20)

    #2 -》 3  6
    np3_arr = np.reshape(np_arr, (2, 3, 1))
    print(np3_arr)
    print("**" * 20)

    # 2 ->1
    np2_arr = np.reshape(np_arr, (1, 6))
    print(np2_arr)
    print(np2_arr.ndim)
    print("**" * 20)

    np1_arr = np.reshape(np_arr, (6,))
    print(np1_arr)
    print(np1_arr.ndim)

五、常用的统计方法

方法说明
sum对数组的全部或某轴向进行求和。
mean算数平均数,零长度的数组的mean为NAN。
min最小值
max最大值
std标准差
var方差
import  numpy as np

if __name__ == '__main__':

    data = np.random.randint(1, 9, 20).reshape(4,5)
    print(data)
    #
    # #1. rand  (0,1)均匀分布
    # d1 = np.random.rand(10)
    # print(d1)
    #
    # #2 正态分布
    # d2 = np.random.randn(100)
    # print(d2)
    #
    # #3.choice
    # d3 = np.array([1, 2, 3, 4])
    # d4 = np.random.choice(d3, (4, 4), p=[0.1, 0, 0.6, 0.3])
    # print(d4)

    #基本的函数
    print(np.sum(data))
    print(np.mean(data))
    print(np.min(data))
    print(np.max(data))
    # 方差 标准差
    data2 = np.array([8,2, 3,4,7,6])
    print(data2.var())
    print(data2.std())

    print(np.var(data2))
    print(np.std(data2))

    #有偏估计 无偏估计 【数量少】
    print(np.var(data2,ddof=1))
    print(np.std(data2,ddof=1))

六、数组的去重

print 'ndarray的唯一化'
x = numpy.array([[1,4,2],[6,1,3],[1,5,2]])
print numpy.unique(x) # [1,2,3,4,5,6]

七、数组的拆分与合并

方法说明
concatenate沿着一条轴进行连接
vstack面向行的方式对数组进行堆叠
hstack面向列的方式对数组进行堆叠
split通过定义axis的值为1或0,进行按行或按列进行分割
vsplit面向行的方式对数组进行分割
hsplit面向列的方式对数组进行分割

组合的使用:

x = numpy.array([[1, 2, 3], [4, 5, 6]])
y = numpy.array([[2,4,6], [8, 10, 12]])
print numpy.concatenate([x, y], axis = 0)  
# 纵向组合 [[ 1  2  3][ 4  5  6][ 2  4  6][8 10 12]]
print numpy.concatenate([x, y], axis = 1)  
# 横向组合 [[ 1  2  3  2  4  6][ 4  5  6 8 10 12]]
print numpy.vstack((x, y)) # 垂直堆叠:相对于垂直组合
print numpy.hstack((x, y)) # 水平堆叠:相对于水平组合

合并与分割

x = numpy.array([[1, 2, 3], [4, 5, 6]])
print numpy.split(x,2,axis=0) 
# 按行分割2次 [array([[1, 2, 3]]), array([[4, 5, 6]])]
print numpy.split(x,3,axis=1) 
# 按列分割3次 [array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]

八、其他说明

本篇文章为初学,如有问题可以提出,请您指正,谢谢观看。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy是在python中处理数据的最基本和最强大的包。 如果您打算从事数据分析机器学习项目,那么对numpy的充分理解几乎是必须的。 其他用于数据分析的软件包(如pandas)是建立在numpy之上,用于构建机器学习应用的scikit-learn软件包也在numpy上运行。 但对于.NET开发人员来说,却没有这样的强大工具库。 虽然有像Deedle和Math.NET这样的开源库,但它们不是很容易使用,也不能借用很多现有的python代码。 NumSharp(Numerical .NET)可以说是C#中的线性代数库。 它是用C#编写的,符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码,从而最大限度地借鉴现有大量在python代码的转译成本。 NumSharp使用最新的Span技术安全高效地访问内存,优化每个模拟API的性能,确保最底层的NDArray达到最佳性能状态。NumSharp对于在数组上执行数学和逻辑运算非常有用。 它为.NET中的n阵列和矩阵的操作提供了大量有用的功能。 让我们给出一个代码片段来说明如何使用NumSharp。 // 初始化一个NumSharp实例,类名故意叫NumPy var np = new NumPy(); // 产生一个数字0到9的向量 np.arange(10) // 产生一个3维张量 np.arange(12).reshape(2, 3, 2); // 产生10个0到9的随机数,并转换成5*5的矩阵 np.random.randint(low: 0, high: 10, size: new Shape(5, 5)); 上面的代码是不是看起来否非常接近python代码?简直就是如出一辙。NumSharp的目的就是让你可以轻松的复制粘贴Python代码。 如何安装: PM> Install-Package NumSharp   NumSharp 已被如下项目使用: Pandas.NET Bigtree.MachineLearning CherubNLP BotSharp 标签:numpy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值