我是靠谱客的博主 迷路耳机,最近开发中收集的这篇文章主要介绍Numpy 数组Numpy 数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Numpy 数组

Numpy数组是具有固定大小的类型化数组。
Numpy数组是同质的,只能存放同一种类型的对象。

数组由两部分组成:

  • 存储在连续的内存块中的实际数据
  • 描述实际数据的元数据

文章目录

  • Numpy 数组
    • 创建一维数组
    • 创建多维数组
    • 选择 Numpy 数组元素
    • Numpy 的数值类型
      • 数据类型对象
      • 字符码
      • dtype 属性
    • 一维数组的切片与索引
    • 处理数组形状
      • 堆叠数组
      • 拆分 Numpy 数组
    • Numpy 数组的属性
    • 数组的转换
    • 创建数组的视图和拷贝

创建一维数组

Numpy:数组的好处是,知道数组元素的类型,能确定存储数组的大小。
Numpy 数组还能用向量化运算来处理整个数组。

In[2]: import numpy as np
In[3]: a = np.arange(5)
In[4]: a.dtype  
Out[4]: dtype('int64')
In[5]: a
Out[5]: array([0, 1, 2, 3, 4])
In[6]: a.shape
Out[6]: (5,)
  • dtype属性:存储元素的类型
  • shape属性:是一个元组,存放的是数组在每个维度的长度

创建多维数组

b = np.array([np.arange(2),np.arange(2)])
b
Out[8]: 
array([[0, 1],
       [0, 1]])
b.shape
Out[9]: (2, 2)
  • array()函数:创建数组,需要传递给一个数组类型对象

选择 Numpy 数组元素

通过a[m,n]的形式访问,m和n是数组元素的下标

b[0,1]
Out[10]: 1
b[0,0]
Out[11]: 0

Numpy 的数值类型

类型说明
bool布尔类型,占用1bit
inti长度取决于平台的整数(通常为int32和int64)
int8字节类型
int16整型
int32整型
int64整型(-263~263-1)
uint8无符号整型
uint32无符号整型
uint64无符号整型(0~2^64-1)
float16半精度浮点型
float32单精度浮点型
flaot64双精度浮点型
complex64复数类型,两个32位浮点数表示
complex128复数类型,两个64位浮点数表示
np.float64(42)
Out[12]: 42.0

数据类型都有相应的转换函数

np.arange(7, dtype=np.uint16)
Out[13]: array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)

创建指定数据类型

  • 不能把复数类型转换成整数
  • 不能把复数类型转换成浮点数
  • 允许把浮点数转换成复数

数据类型对象

数据类型对象是 numpy.dtype 类的实例,数组也是有数据类型。

a.dtype.itemsize
Out[14]: 8
  • itemsize属性:查看字节的具体数目

字符码

为了与前身 Numeric 向后兼容

类型字符码
整型i
无符号整型u
单精度浮点型f
双精度浮点型d
布尔型b
复数型D
字符型S
np.arange(7, dtype='f')
Out[16]: array([0., 1., 2., 3., 4., 5., 6.], dtype=float32)

dtype 属性

t = np.dtype('f')
t.char
Out[19]: 'f'
t.type
Out[20]: numpy.float32

类型属性相当于数组元素对象的类型,dtype的属性str中保存的是一个表示数据类型的字符串。

一维数组的切片与索引

一维数组的切片操作与Python列表的切片一样。

a = np.arange(9, dtype='i')
a[3:7]
Out[24]: array([3, 4, 5, 6], dtype=int32)
a[::-1]
Out[25]: array([8, 7, 6, 5, 4, 3, 2, 1, 0], dtype=int32)

处理数组形状

拆解

b = np.arange(24).reshape(2,3,4)
b
Out[27]: 
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]]])
b.ravel()
Out[28]: 
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])
  • ravel()函数:将多维数组变成一维数组

拉直

b.flatten()
Out[29]: 
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])
  • flatten()函数:功能与ravel()相同,返回的是真实的数组,而ravel()函数返回的只是数组的视图。

指定数组形状

b.shape = (4,6)
b
Out[32]: 
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]])
  • shape属性:除了reshape()函数外,可以直接用元组来定义数组的形状。

转置

b.transpose()
Out[33]: 
array([[ 0,  6, 12, 18],
       [ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21],
       [ 4, 10, 16, 22],
       [ 5, 11, 17, 23]])
  • transpose()函数:将行变为列,列变为行。
    调整大小
b.resize((2,12))
b
Out[35]: 
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]])
  • resize()函数:作用和reshape()类似,但是它会改变所作用的数组,reshape()返回一个视图。

堆叠数组

数组既可以横向叠放还可以竖向叠放

a = np.arange(9).reshape(3,3)
b = 2 * a

水平叠放

a.shape
Out[45]: (3, 3)
b.shape
Out[46]: (3, 3)
np.hstack((a,b))
Out[47]: 
array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])
  • np.hstack()函数:水平叠加数组
    垂直叠加
np.vstack((a,b))
Out[48]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])
  • np.vstack()函数:垂直叠加函数

concatenate()函数

np.concatenate((a,b), axis=1)   # 水平叠加
np.concatenate((a,b), axis=0)   # 垂直叠加

深度叠加

np.dstack((a,b))
Out[51]: 
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],
       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],
       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])
  • np.dstack()函数:深度叠加,沿着第三个坐标轴(纵向)的方法来叠加数组

列式堆叠

one = np.arange(2)
two = one * 2
np.column_stack((one, two))
Out[54]: 
array([[0, 0],
       [1, 2]])
  • np.column_stack()函数:以列的方式对一维数组进行堆叠,当该方法堆叠二维数组时,过程类似于hstack()函数。
    行式堆叠
np.row_stack((one,two))
Out[55]: 
array([[0, 1],
       [0, 2]])
  • np.row_stack()函数:以行的当时对一维数组进行堆叠,当该方法堆叠二维数组时,过程类似于vstack()函数。

拆分 Numpy 数组

可以纵向、横向和深度方法来拆分数组,相关函数hsplit()vsplit()dsplit()split()函数。

横向拆分

Out[58]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.hsplit(a,3)
Out[59]: 
[array([[0],
        [3],
        [6]]), array([[1],
        [4],
        [7]]), array([[2],
        [5],
        [8]])]

纵向拆分

np.vsplit(a,3)
Out[60]: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

np.splidt()函数

  • np.split(a, 3, axis=1)和横向拆分np.hsplit()相同
  • np.split(a, 3, axis=0)和纵向拆分np.vsplit()相同

深度拆分

dsplit():会沿着深度方向分解数组。

Numpy 数组的属性

属性描述
a.shape数组每个维度的长度
a.dtype数组存放的类型
a.size保存元素的数量
a.ndim维度的数量
a.itemsize各个元素所占用的字节数
a.nbytes存储整个数组占用的字节数量
a.T矩阵的转置,和a.transpose()作用相同
a.flat返回数组的所有元素,返回迭代器类型

数组的转换

转换成列表

a
Out[61]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
a.tolist()
Out[62]: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

创建数组的视图和拷贝

a.copy()    # 创建一个副本
a.view()    # 创建一个视图

最后

以上就是迷路耳机为你收集整理的Numpy 数组Numpy 数组的全部内容,希望文章能够帮你解决Numpy 数组Numpy 数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部