【机器学习】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]])]

八、其他说明

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

你可能感兴趣的:(Numpy,python,数据分析)