概述
title: D02|Numpy常用函数
author: Adolph Lee
categories: 数据挖掘基础
tags:
- 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基础的讲解。
转载请注明出处
最后
以上就是冷酷信封为你收集整理的c#如何跳出一个函数_D02 Numpy常用函数,如何优雅的遍历一个多维数组?如何优雅的遍历一个数组,使用嵌套for循环吗?改变数组形状的全部内容,希望文章能够帮你解决c#如何跳出一个函数_D02 Numpy常用函数,如何优雅的遍历一个多维数组?如何优雅的遍历一个数组,使用嵌套for循环吗?改变数组形状所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复