c#如何跳出一个函数_D02 Numpy常用函数,如何优雅的遍历一个多维数组?


title: D02|Numpy常用函数
author: Adolph Lee
categories: 数据挖掘基础
tags:

  • Python
  • 数据挖掘基础
  • Numpy

如何优雅的遍历一个数组,使用嵌套for循环吗?

当我们想要遍历一个多维数组的时候,如果通过不停的使用循环去遍历,这会让我们的代码可读性与性能都变得很差,numpy提供了一个函数nditer,以帮助我们遍历数组。nditer的入参是一个数组,返回值是一个可迭代对象。nditer 默认会优先遍历行序,通过order参数可以使其优先遍历列序。

b70edb3f1ab2f7b51d75a56b3a801aec.png

numpy.nditer

  •   nditer返回一个迭代器对象
  •   nditer默认优先遍历行序
  •   nditer默认返回0维数组
import numpy as nparray_2d = np.arange(0, 10).reshape(2, 5)print(array_2d)# 优先行序遍历for element in np.nditer(array_2d): print(element)# 优先列序遍历for element in np.nditer(array_2d, order='F'): print(element)# 返回1维数组for element in np.nditer(array_2d, flags=['external_loop'],order='F'): print(element)

1927d71289aafda399a2d3e7841ae3ee.png

改变数组形状

在实际问题的处理之中,我们经常需要改变数组的形状,以转换为更为适合处理的数据结构。reshape用于在不改变数组数据的条件下,修改数组的形状,我们在快速创建矩阵的适合已经多次使用过该函数。下面再来简单回顾一下。

reshape

  •   numpy.reshape(arr, newshape, order=’C’)
  •   arr 是需要改变形状的数组
  •   newshape 是新数组的维度属性,新数组的维度属性应与原数组兼容,例如行列相等
  •   order 是指定按行序或列序改变数组,’C’ — 按行,’F’ — 按列,’A’ — 原顺序,’k’ — 元素在内存中的出现顺序。其默认值为’C’。

数组转置

ndarray.T,该方法会将数组进行行列转换

import numpy as nparray_2d = np.arange(0,10).reshape(2,5)print(array_2d)print(array_2d.T)

5c6bd7b98ebacc8705b1bf878909e2e1.png

数组切割

数据切割,顾名思义是将数组切割为多个数组。关于数组切割,numpy提供了一个强大的函数split,split可以指定按照横向或则竖向切割数组。

  •   numpy.split(ary, indices_or_sections, axis)
  •   ary 是需要切割数组
  •   indices_or_sections 指定需要切割的份数
  •   axis 是指定数组的切割方向,默认为0,横向切割, axis=1时为竖向切割

import numpy as np# 按行切割array_2d = np.arange(0,10).reshape(2,5)print(array_2d)print(np.split(array_2d,2))# 按列切割array_2d = np.arange(0,12).reshape(2,6)print(array_2d)print(np.split(array_2d,3,axis=1))

d96976573c5be7f695bd20a52cfd541a.png

向数组中添加元素

numpy提供了两个向数组中添加元素的方法,分别时append方法和insert方法。append方法会将元素添加至原数组末尾,insert方法会将元素插入到指定索引位置。下面分别来练习一下两种方法的使用。

append

  •   numpy.append(arr, values, axis=None)
  •   append默认返回一个一维数组
  •   arr为需要执行插入操作的数组
  •   values为需要插入的值
  •   axis指定插入方式 axis=0为按行插入,axis=1为按列插入
  •   当指定axis时 插入的数组维度必须与原数组相等

import numpy as nparray_2d = np.arange(0,10).reshape(2,5)print(array_2d)#向数组中插入元素new_array_1d = np.append(array_2d,[1,2,3])print(new_array_1d)#按行序向数组中插入元素# 注意:当指定行列时,输入数组的维度必须与原数组相同new_array_2d = np.append(array_2d,[[10,11,12,13,14]],axis=0)print(new_array_2d)#按列序向数组中插入元素np.append(array_2d,[[5],[10]],axis=1)print(array_2d)

6150afe0b51986dc5b6e442b680111fc.png

insert

  •   numpy.insert(arr, obj, values, axis)
  •   insert默认返回一个一维数组
  •   arr 需要插入元素的数组
  •   obj 需要插入的索引位置
  •   values 需要插入的值
  •   axis 指定插入方式,axis=0为按行插入,axis=1为按列插入

import numpy as nparray_2d = np.arange(0,10).reshape(2,5)print(array_2d)# 向指定位置插入元素new_array_1d = np.insert(array_2d,obj=5,values=[100,101])print(new_array_1d)# 向指定位置按行序插入元素new_array_2d = np.insert(array_2d,obj=1,values=[10,11,12,13,14],axis=0)print(new_array_2d)# 向指定位置按列序插入元素new_array_2d = np.insert(array_2d,obj=1,values=[5,10],axis=1)print(new_array_2d)

97590e0b508af4199ce9c608e294e859.png

删除数组中的元素

怎么样,通过numpy我们可以很方便的操作复杂的数组,下面来看一下本节最后一个内容,数组中元素的删除delete,delete与insert,append一样它们不会改变元素组,而是会返回一个新数组,下面来练习一下delete的使用。

delete

  •   numpy.delete(arr, obj, axis)
  •   arr 是需要执行删除操作的数组
  •   obj 是需要删除元素的索引位置
  •   axis 是指定行序列序,axis=0为行序,axis=1为列序,默认是将数组展开为1维数组

import numpy as nparray_2d = np.arange(0,10).reshape(2,5)print(array_2d)# 将数组展开为一维数组后删除指定索引位置元素,并返回一维数组new_array_1d = np.delete(array_2d,3)print(new_array_1d)# 删除指定行序位置的元素new_array_2d = np.delete(array_2d,0,axis=0)print(new_array_2d)# 删除指定列序位置的元素new_array_2d = np.delete(array_2d,1,axis=1)print(new_array_2d)

e54000d243f1811b093740f5f798c991.png

关于numpy的基础即将结束,下一章将会讲解numpy的统计、排序与筛选,在这之后便会进入下一张pandas基础的讲解。

转载请注明出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值