NightPxy 个人技术博客

机器学习-numpy

Posted on By NightPxy

简介

numpy 包,是矩阵处理的核心包

ndarray

矩阵是一种数学定义,在编程模型上就是多维数组
numpy为此专门封装了一种数据模型ndarray

  • ndarray是一种由相同类型元素组成的多维数组
  • ndarray的元素数量是预先定义的,创建后的ndarray的大小不能再发生变化

ndarray的核心属性

sharp

sharp属性是矩阵的形状,它由一个元组(Turple(x,y))表示x行y列

矩阵形状的修改

  • 直接修改sharp属性
    要求:修改后的元素总数(形状乘积)不变
  • 通过resharp函数修改
    要求:修改后的元素总数(形状乘积)不变
    注意,此时是以引用拷贝的方式创建一个新形状的数组,也就是修改任意一个数组中的元素都会同时影响两个数组

ndim

ndim属性是矩阵的维度(轴)个数,维度(轴)的个数也被称为
例如 形状(2,3)的两行三列的维度数是二,所以也可以称其为二维矩阵

size

size属性是矩阵的元素个数总数
size属性可以由sharp乘积计算
例如 形状(2,3)的 矩阵,其size个数就是2*3=6

dtype

dtype是描述矩阵元素类型的,一个矩阵有且仅有一个dtype
可以通过astype进行修改元素类型从而得到一个新的矩阵

数据类型

数据类型 类型缩写 说明
int_   默认整形
intc   等价于long的整形
int8 i1 整型,一个字节,[-128,127]
int16 i2 整型,两个字节,[-32768,32767]
int32 i3 整型,四个字节,[-2^31,2^31-1]
int64 i4 整型,八个字节,[-2^63,2^63-1]
uint8 u1 整型(正数),一个字节,[0,255]
uint16 u2 整型(正数),两个字节,[0,65535]
uint32 u3 整型(正数),四个字节,[0,2^32-1]
uint64 u4 整型(正数),八个字节,[0,2^64-1]
bool_   一个字节形成存储的布尔值(True或者False)
float_   等价于float64
float16 f2 半精度浮点数(2字节):1符号位+5位指数+10位小数部分
float32 f4或者f 单精度浮点数(4字节):1符号位+8位指数+23位小数部分
float64 f8或者d 双精度浮点数(8字节):1符号位+11位指数+52位小数部分
complex_ c16 complex128的简写模式
complex64 c8 复数,由两个32位浮点数组成
complex128 c16 复数,由两个64位浮点数组成
object O Python对象类型
String_ S 固定长度的字符串类型(每个字符1个字节),比如创建一个长度为8的字符串,应该使用S8
Unicode_ U 固定长度的unicode类型字符串(每个字符占用字节数由平台决定)

itemsize

itemsize是矩阵中每个元素的字节数大小
例如 类型为float64的矩阵,每个元素的大小是8=64/8

ndarray的创建

array函数


import numpy as np

#
# array函数,从一个Python数组中创建矩阵  
#
np.array([1,2,3])
# 输出结果
'''
array([1,2,3])
'''

#
# zeros函数,指定形状创建一个全零矩阵  
#
np.zeros((3,3)) # sharp=(3,3) 三行三列
# 输出结果
'''
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
'''

#
# ones函数,指定形状创建一个全零矩阵  
#
np.ones((2,3,3)) # sharp=(2,3,3) 两片三行三列 三维矩阵
# 输出结果
'''
array([[[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]])
        
#
# arange函数,指定起始,结束,步长来创建一维矩阵(不包括终值)
#
np.arange(1,9,2) # 起始1,结束9(不含),步长2  
# 输出结果
'''
array([1, 3, 5, 7])
'''

#
# linespace函数,根据开始,结束,总元素个数来创建一维矩阵(等差数列创建)
#
np.linespace(1,100,10,endpoint=False) # edpoint包括终值,默认false
# 输出结果
'''
array([1.e+001, 1.e+012, 1.e+023, 1.e+034, 1.e+045, 1.e+056, 1.e+067,
       1.e+078, 1.e+089, 1.e+100])
'''

#
# logspace函数,根据开始,结束,总元素个数来创建一维矩阵(等比数列创建)
#
np.logspace(1,100,10)
# 输出结果
'''
array([1.e+001, 1.e+012, 1.e+023, 1.e+034, 1.e+045, 1.e+056, 1.e+067,
       1.e+078, 1.e+089, 1.e+100])
'''

#
# random 函数组,根据形状使用随机数填充数据
#
np.random.randonint(1,9,(2,3)) #随机范围[1,9),形状(2,3)
# 输出结果
'''
array([[1, 7, 1],
       [3, 4, 6],
       [7, 5, 2]])
'''