Numpy基础入门

作者: 躺在稻田里的小白菜 | 来源:发表于2018-08-02 11:13 被阅读0次

一. Numpy的主要功能

  • 数组的算数和逻辑运算。
  • 傅立叶变换和用于图形操作的例程。
  • 线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

二. Numpy的基本数据结构

Numpy提供的核心功能是数组,所以它的最基本的数据结构就是多维数组结构Ndarray。Ndarray无论是运算速度,还是功能函数都比list结构要更好。该结构的特点如下:

  1. 数组中所有的元素类型相同。
  2. 每个元素在内存中的块大小相同。
  3. 数组的维度信息存放在shape属性,类型信息存放在dtype属性。

三. Ndarray结构的基本使用

1. 创建Ndarray
  1. 直接使用np.array()创建
    numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
    object参数,接受一切序列型的对象,用于创建数组。
    dtype参数,为数组指定一个类型
    order参数,(C语言风格)按行显示数组='C'; 或者(Fortran语言风格)按列显示数组='F'
    ndmin参数,指定数组的最小维度
# 最小维度  
import numpy as np 
a = np.array([1, 2, 3, 4, 5], ndmin =  2, dtype=np.float)  #本来是一维数组,强行控制它为二维数组
print (a)

Out:
[[1.0, 2.0, 3.0, 4.0, 5.0]]
  1. 固定填充元素创建
    创建空数组:numpy.empty (shape, dtype = float, order = 'C')
    创建全0数组:numpy.zeros (shape, dtype = float, order = 'C')
    创建全1数组:numpy.ones (shape, dtype = None, order = 'C')

shape参数,整数表示一维数组的长度,元组表示多维数组的形状。

  1. 从已有数据中创建
    从其他序列创建 numpy.asarray(object, dtype = None, order = None)
    该函数类似于np.array(),主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
    从迭代器创建 numpy.fromiter(iterable, dtype, count = -1)
    count参数,读取的数据量,-1表示所有数据

  2. 给定范围生成数组

  • 按步长 numpy.arange(start, stop, step, dtype)

  • 按间隔数量 numpy.linspace(start, stop, num, endpoint, retstep, dtype)

2. Ndarray的常用属性
  • ndarray.shape 数组维度
  • ndarray.dtype 数组类型
  • ndarray.ndim 数组最小维度
  • ndarray.itemsize 数组每个元素的字节长度
3. Ndarray的切片与索引
  1. 下标索引:同Python,下标从0开始。
  2. 切片:与Python相同,Ndarray的切片依旧使用 [开始下标:终止下标(不包含):步长]的格式。
    可以使用省略号...,表示某个维度的所有元素
arr=np.asarray([[1,2,3,4],[5,6,7,8]])
print(arr)
print(arr[...,1])# 打印第2列所有元素

Out:
[[1 2 3 4]
 [5 6 7 8]]

[2 6]

注意:Numpy切片与Python序列切片最大的不同在于,ndarray切片返回值是原数组的视图,修改切片会影响原数组;而Python序列的切片返回值是副本,与原序列没关系。如果需要ndarray的切片副本,需要显示复制a=arr[2:5].copy()

4. Ndarray的高级索引
  1. 整数索引
    以前访问多维数组的时候,我们使用多个中括号来表达不同的轴,比如下图。这种方式一次只能访问一个元素。
arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[1][0])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

6

如果我们使用的中括号的数量小于数组的维度,那么更高级的轴将被全选,比如下图。

arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[1])

out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[6 7 8]

但是对于更高级的轴,我们不想全选,只想选取若干个怎么办?这时Ndarray的特点就显现了。他可以对每个轴都进行选择,用逗号隔开每个轴之间的下标,按顺序构成坐标对,举个例子,下图中,第一个中括号表示对第一个轴的选取,第二个中括号是对第二个轴的选取,两个轴按顺序构成坐标对(0,1),(1,2),得到这2个位置的数据

arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[ [0,1],[1,2] ])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[3 8]

上面是按照坐标对来选择的,如果想选择某块数据怎么办?我们可以按轴切片,轴切片之间用逗号隔开,举个例子。

arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[:2,1:])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[[3 4]
 [7 8]]

敲黑板,总结 一下整数索引:

  • 老旧方法:1. 使用与维度数目一样的中括号来访问单个元素;2. 使用少于维度数目的中括号访问一片高维度数据。
  • Ndarray独有方法:在中括号内对所有轴做选择,不同轴用逗号隔开arr[轴1,轴2,轴3],枚举下标要用中括号包裹起来,切片不用包裹,二者可以混用。举个栗子:
arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[ [0,1],1: ])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[[3 4]
 [7 8]]
  1. 布尔索引
    之前我们在某个维度选取元素的时候,使用的都是整数下标,其实可以不用下标的,而是用布尔数组,但是要求布尔数组和这个维度的长度一致。举个例子,假设我们要选择第二行所有数据:
arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[ [False,True,False] ])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[[6 7 8]]

或者选择第二行,第二列和第三列的数据。方法和整数索引一样,不同的是,这次用布尔数组。

arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print (arr)
print(arr[[False,True,False],[False,True,True]])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[7 8]

其实Ndarray做逻辑运算的时候,会返回一个布尔数组,我们可以利用这一点,直接进行数据选择:

arr=np.array([[2,3,4],[6,7,8],[1,1,1]])
print(arr)
print (arr>2)
print(arr[arr>2])

Out:
[[2 3 4]
 [6 7 8]
 [1 1 1]]

[[False  True  True]
 [ True  True  True]
 [False False False]]

[3 4 6 7 8]

最后强调一点,布尔数组必须和筛选维度的长度一致!!!!

相关文章

  • Numpy简易入门笔记

    来自 AI基础:Numpy简易入门手动运行了一遍实例代码,笔记待查于此处。 Numpy 简易入门 Numpy是 N...

  • 【Chapter 4】 NumPy基础:数组和矢量计算

    【Chapter 4】 NumPy基础:数组和矢量计算 使用 Python 进行科学计算:NumPy入门 NumP...

  • NumPy之 索引技巧

    系列文章 一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝NumPy...

  • Numpy 学习笔记

    numpy 笔记 入门基础 转化为矩阵 输出矩阵维度 输出形状 共有多少元素 创建numpy数组 创建0矩阵 创建...

  • NumPy之操控ndarray的形状

    系列文章 一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝 概述 这...

  • Numpy基础入门

    一. Numpy的主要功能 数组的算数和逻辑运算。 傅立叶变换和用于图形操作的例程。 线性代数有关的操作。 Num...

  • numpy基础入门

    1. 矩阵的创建 np.arange类似range函数 np.array用来生成矩阵 dtype是数据类型,有in...

  • NumPy 基础入门

    NumPy 基础入门 多维数组 数值类型 数据类型对象(dtype) 记录类型 操作形状 堆叠 分割 属性 转换

  • NumPy 基础入门

    NumPy 内置了进行数据分析时所要执行的大量基础任务所需的函数 一维数组、二维数组 输出结果为: 从数组中取值 ...

  • NumPy之浅拷贝和深拷贝

    系列文章 一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝 概述 N...

网友评论

    本文标题:Numpy基础入门

    本文链接:https://www.haomeiwen.com/subject/saxqvftx.html