NumPy 知识全面知识汇总(持续更新中)

目录

NumPy介绍:

NumPy 安装:

NumPy Ndarray 对象 :

实例:

数据类型对象 (dtype)

数据类型对象(numpy.dtype 类的实例)

数组

数组属性

ndarray.ndim

ndarray.itemsize

NumPy 创建数组

NumPy 从已有的数组创建数组

NumPy 从数值范围创建数组

 NumPy 切片和索引

Numpy 数组操作

修改数组形状

翻转数组


NumPy介绍:

是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy 安装:

  • 安装 NumPy 最简单的方法就是使用pip工具
    pip3 install --user numpy scipy matplotlib
  •  使用清华的镜像(速度快)
    pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

  • 验证是否安装(在pycharm中)
    # 导入 numpy 库。
    from numpy as np
    eye(4)
    
    # 输出
    array([[1., 0., 0., 0.],
           [0., 1., 0., 0.],
           [0., 0., 1., 0.],
           [0., 0., 0., 1.]])

NumPy Ndarray 对象 :

  1.  ndarray是一个N维数组对象,是同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
  2. ndarray 对象是用于存放同类型元素的多维数组。

  3. ndarray 中的每个元素在内存中都有相同存储大小的区域。

  • ndarray 内部由以下内容组成:

    •  一个指向数据(内存或内存映射文件中的一块数据)的指针。

    • 数据类型或 dtype,描述在数组中的固定大小值的格子。

    • 一个表示数组形状(shape)的元组,表示各维度大小的元组。

    • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

实例:

# 实例1
import numpy as np 
# 通过列表创建一维数组
a = np.array([1,2,3])  
print (a)

# 结果
[1 2 3]
# 实例2,多于一个维度  
import numpy as np 
a = np.array([[1,  2],  [3,  4]])  
print (a)

# 结果
[[1  2] 
 [3  4]]

 ndmin:设置最小维度:结果矩阵显示的维度会按照ndmin中的设置

# 最小维度  
import numpy as np 
a = np.array([1, 2, 3, 4, 5], ndmin =  2)  
print (a)

# 结果
[[1 2 3 4 5]]

数据类型对象 (dtype)

数据类型对象(numpy.dtype 类的实例)

        用来描述与数组对应的内存区域是如何使用

  1. 数据的类型(整数,浮点数或者 Python 对象)
  2. 数据的大小(例如, 整数使用多少个字节存储)
  3. 数据的字节顺序(小端法或大端法)
  4. 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
  5. 如果数据类型是子数组,那么它的形状和数据类型是什么。
numpy.dtype(object, align, copy)

# object - 要转换为的数据类型对象
# align - 如果为 true,填充字段使其类似 C 的结构体。
# copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

        实例

import numpy as np
# 使用标量类型
dt = np.dtype(np.int32)
print(dt)

# 结果
int32

数组

数组属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量---秩,就是数组的维数。

  • ndarray.ndim

import numpy as np 
 
a = np.arange(24)  
print (a.ndim)        # a 现只有一个维度
# 现在调整其大小
b = a.reshape(2,4,3)  # b 现在拥有三个维度
print (b.ndim)

# 结果
1
3
  • ndarray.shape
import numpy as np  
 
a = np.array([[1,2,3],[4,5,6]])  
print (a.shape)

# 结果
(2, 3)
  • ndarray.itemsize

    import numpy as np 
    
    # 数组的 dtype 为 int8(一个字节)  
    x = np.array([1,2,3,4,5], dtype = np.int8)  
    print (x.itemsize)
     
    # 数组的 dtype 现在为 float64(八个字节) 
    y = np.array([1,2,3,4,5], dtype = np.float64)  
    print (y.itemsize)
    
    # 结果
    1
    8

    NumPy 创建数组

  • numpy.empty

        numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组

import numpy as np 
x = np.empty([3,2], dtype = int) 
print (x)

# 结果
[[ 6917529027641081856  5764616291768666155]
 [ 6917529027641081859 -5764598754299804209]
 [          4497473538      844429428932120]]
  • numpy.zeros
import numpy as np
 
# 默认为浮点数
x = np.zeros(5) 
print(x)
 
# 设置类型为整数
y = np.zeros((5,), dtype = int) 
print(y)
 
# 自定义类型
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])  
print(z)

# 结果
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
 [(0, 0) (0, 0)]]
  • numpy.ones
    import numpy as np
     
    # 默认为浮点数
    x = np.ones(5) 
    print(x)
     
    # 自定义类型
    x = np.ones([2,2], dtype = int)
    print(x)
    
    # 结果
    [1. 1. 1. 1. 1.]
    [[1 1]
     [1 1]]

    NumPy 从已有的数组创建数组

  • numpy.asarray

    numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个

    import numpy as np 
     
    x =  [1,2,3] 
    a = np.asarray(x)  
    print (a)
    
    # 结果
    [1  2  3]

    NumPy 从数值范围创建数组

  • numpy.arange

        numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象

import numpy as np
 
x = np.arange(5)  
print (x)

# 结果
[0  1  2  3  4]
import numpy as np
 
# 设置了 dtype,返回类型为float
x = np.arange(5, dtype =  float)  
print (x)

# 结果
[0.  1.  2.  3.  4.]
  • numpy.linspace

        numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的

import numpy as np
a = np.linspace(1,10,10)
print(a)

# 结果
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]

 NumPy 切片和索引

  •  slice 函数
import numpy as np
 
a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])

# 结果
[2  4  6]
  • 冒号分隔切片参数 start:stop:step 来进行切片操作 
import numpy as np
 
a = np.arange(10)  
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)

# 结果
[2  4  6]

Numpy 数组操作

修改数组形状

  • numpy.reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状

import numpy as np
 
a = np.arange(8)
print ('原始数组:')
print (a)
print ('\n')
 
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)

# 结果
原始数组:
[0 1 2 3 4 5 6 7]

修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]

翻转数组

  • numpy.transpose
import numpy as np
 
a = np.arange(12).reshape(3,4)
 
print ('原数组:')
print (a )
print ('\n')
 
print ('对换数组:')
print (np.transpose(a))

# 结果
原数组:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

对换数组:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]
  • numpy.ndarray.T
    import numpy as np
     
    a = np.arange(12).reshape(3,4)
     
    print ('原数组:')
    print (a)
    print ('\n')
     
    print ('转置数组:')
    print (a.T)
    
    # 结果
    原数组:
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    
    
    转置数组:
    [[ 0  4  8]
     [ 1  5  9]
     [ 2  6 10]
     [ 3  7 11]]

猜你喜欢

转载自blog.csdn.net/y1120944224/article/details/128049411