机器学习笔记3_numpy的数组

机器学习笔记3_numpy入门

前言

import numpy as np
import array
array模块

该模块的函数可以创建都是同一种数据类型的列表,在定义时需要先声明。

arr = array.array('i',[i for i in range(10)])
arr[5]
numpy模块

array的创建若是刚开始都是Integer,则这个array的dtype就是integer类型

对integer的array赋值3.14(浮点数)是不行的

若是想创建dtype为float的array,则在创建数组时写成小数(例子:3.0)

arr1 = np.array([i for i in range (5)])
arr1[3] = 3.0
arr1

numpy创建数组

同一个数的数组
  • np.zeros(size = (2,3), dtype = ‘int64’)
  • np.ones(size = (2,3), dtype = ‘int64’)
  • np.full(shape, fill_value, dtype=None, order=‘C’)
连续数的数组
  • np.arange(start,stop, step, dtype=None)
  • np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0)
随机数的数组
  • np.random.randint(start,stop,size)
  • np.random.random(size) # 默认0-1中取随机数
  • np.random.seed(label_num)
  • np.random.nomal(loc=0.0, scale=1.0, size=None)

其中,所有当有(start,stop)的函数的区间的开闭应该被注意,一般为左闭右开

但是,np.linspace的(start,stop)是一定会包含到数组中的!

array的属性,方法以及取值

array的取值
某行某列数据取值(一个数值)
  • array1[1][1] # 这是一个很差的方法
  • array1(1,1) # 正确的方法
切片取值

理解以下切片的取值

  • array1(:5,:5) # **切片的取值也是左关右闭
  • array1(1:5,1:6:-1)
  • array1(1:5,1:6:2)

array1[2:4][3:5]指的是什么?,如下所示:

array1 = np.random.randint(1,10,size=(5,5))
array1[:3][:3]
array([[4, 1, 1, 1, 6],
       [1, 1, 5, 1, 5],
       [1, 7, 9, 6, 8]])

上述取值方法与我们想表达的不同,故我们不用[][]的方式为数组取值。

array的属性以及方法

属性
  • array.size
  • array.dtype
  • array,ndim
  • array.shape
方法
  • array2 = array2.reshape(3,5)
  • array2 = array1.copy()

array2.reshape(2,-1) # 其中的-1指的是什么?

切片和reshape的赋值问题

在python中

当:

‘’’
sublist = list[3:10]
sublist[5] = 999
‘’’
最后会改变sublist的值吗?(不会)因为切片后就是新的一个列表

在numpy中
  1. 切片的赋值

subarray = array[3:10]
subarray[5] = 999

array的值会改变吗?(会)numpy中的切片仍是原array

如何修改subarray而不修改原数组,可以用.copy()的方法

  1. reshape的赋值

array2 = array1.reshape(3,5)


array的shape改变了吗?没有,这个方法是有返回值不改变原对象的

numpy数组的合并与分割

有如下方法:

array的数直合并和水平合并

分别为:np.vstack([arr1,arr2])和np.hstack([arr1,arr2])

这里的v和h指的是两个数组合并vertical 和 horizontal

arr1 = np.arange(15).reshape(3,5)
arr2 = np.vstack([arr1,arr1])  # 此处的[]为必须药添加的
arr2
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
arr1 = np.arange(15).reshape(3,5)
arr2 = np.hstack([arr1,arr1])  # 此处的[]为必须药添加的
arr2
array([[ 0,  1,  2,  3,  4,  0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 10, 11, 12, 13, 14]])
水平水平分割和竖直分割

分别为:np.vsplit(arr1,[2])和np.hsplit(arr1,[-1]) # 这里的3是指从第2行开始分割和倒数第一列开始分割

尤其注意:vsplit指的是数据切割后的新array是竖直排列的hsplit指的是数据切割后的新array是水平排列的

arr1 = np.arange(54).reshape(6,9)
V1, V2 = np.vsplit(arr1,[3])  # 此处的[]为必须药添加的,从第三列开始切割
H1, H2 = np.hsplit(arr1,[-1])  # 此处的[]为必须药添加的,从倒数第1行开始切割
V1
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23, 24, 25, 26]])
V2
array([[27, 28, 29, 30, 31, 32, 33, 34, 35],
       [36, 37, 38, 39, 40, 41, 42, 43, 44],
       [45, 46, 47, 48, 49, 50, 51, 52, 53]])
H1
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 9, 10, 11, 12, 13, 14, 15, 16],
       [18, 19, 20, 21, 22, 23, 24, 25],
       [27, 28, 29, 30, 31, 32, 33, 34],
       [36, 37, 38, 39, 40, 41, 42, 43],
       [45, 46, 47, 48, 49, 50, 51, 52]])
H2
array([[ 8],
       [17],
       [26],
       [35],
       [44],
       [53]])

hsplit 常常用于分离标签与数据


学习视频来源B站

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值