打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
D02 Numpy常用函数,如何优雅的遍历一个多维数组?

  • Python

  • 数据挖掘基础

  • Numpy


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

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

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)

改变数组形状

在实际问题的处理之中,我们经常需要改变数组的形状,以转换为更为适合处理的数据结构。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)

数组切割

数据切割,顾名思义是将数组切割为多个数组。关于数组切割,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))

向数组中添加元素

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)

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)

删除数组中的元素

怎么样,通过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)

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

转载请注明出处

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
numpy中数组的遍历技巧
NumPy基础教程(三)高级属性
Python Numpy 数组的初始化和基本操作
numpy 简介
Python之Numpy库常用函数大全(含注释)
[Python学习] python 科学计算库NumPy
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服