numpy

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

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

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

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

二. Numpy的使用

  1. 用Numpy创建数组

     import numpy as np
     
     
     # 1). 创建数组: a, b, c创建的数组相同, 任选一种;
     a = np.array([1, 2, 3, 4, 5])
     b = np.array(range(1, 6))
     c = np.arange(1, 6)
     
     print(a, b, c)
     #
     # # 2). 查看numpy创建的数组类型
     print(type(a))
     print(type(b))
     print(type(c))
     
     #
     # 3). 查看数组存储的数据类型, 常见的数据类型还有哪些?
     print(a.dtype)   # 为什么是int64? 因为硬件架构是64位;
     
     
     # 4). 制定创建的数组的数据类型
     d = np.array([1.9, 0, 1.3, 0], dtype=float)
     print(d, d.dtype)
     #
     # 5). 修改数组的数据类型
     e = d.astype('int64')   # 里面可以是数据类型, 也可以是数据代码;int64---i1
     print(e, e.dtype)
     
     # 6). 修改浮点数的小数点位数
     # 随机创建一个三行四列的数组;
     f = np.random.random((3, 4))
     print(f)
     
     # 修改浮点书的小数位数为3位
     g = np.round(f, 3)
     print(g)
    

运行结果为:
在这里插入图片描述

  1. 矩阵的转置

     import numpy as np
     
     data = np.random.random((3, 4))
     
     # 转换数据结构 # 2,6
     data = data.reshape((2, 6))
     
     print(data)
     print("转置: ", data.T)
     print("转置: ", data.transpose())
     print("转置: ", data.swapaxes(1, 0))
    

运行结果为:
在这里插入图片描述

  1. Numpy的切片和索引

     import numpy as np
     a = np.arange(12).reshape((3, 4))
     
     print(a)
     
     # *****************取单行或者单列*********************
     # 取第2行;
     print(a[1])
     # 取第3列;
     print(a[:, 2])
     # 获取第2行3列的数据
     print(a[1, 2])
     
     
     
     # *****************取连续行或者列*********************
     # 取第2行和第3行;
     print(a[1:3])
     
     # 取第3列和第4列
     print(a[:, 2:4])
     
     # 行: 1和2   列: 2
     print(a[0:2, 1:2])
     
     
     
     # *****************取不连续的行或者列*********************
     # 行: 1和3   列: all 获取第一行和第三行的所有元素
     print(a[[0, 2], :])
     # 行: all   列: 1, 4
     print(a[:, [0, 3]])
     # 行: 1 , 3   列: 1 4  获取第一行第一列的元素, 和第三行第4列的元素
     print("*"*10)
     print(a[[0, 2], [0, 3]])
    

在这里插入图片描述

  1. Numpy中数值的修改

     import numpy as np
     
     # 执行行和指定列的修改
     t = np.arange(24).reshape((4, 6))
     print(t)
     #行: all, 列: 3,4
     t[:, 2:4] = 0
     print(t)
     
     # 布尔索引
     print(t < 10)
     #
     t[t < 10] = 100
     print(t)
     
     t[t > 20] = 200
     print(t)
     
     
     # numpy的三元运算符 t<100?0:10
     t1  = np.where(t < 100, 0, 10)
     print(t)
     print(t1)
    

运行结果为:
在这里插入图片描述

  1. 获取矩阵的四角元素

     import  numpy as np
     
     def get_edge(data):
         row  ,column = data.shape
         rows = np.array([[0,0],[row-1,row-1]])
         cols = np.array([[0,column-1] , [0,column-1]])
         return data[rows,cols]
     
     if __name__ == '__main__':
         x= np.arange(30).reshape((5,6))
         print("data" , x)
         print("result:" , get_edge(x))
    

运行结果为:
在这里插入图片描述

  1. 花式索引

     """
     花式索引
         花式索引指的是利用整数数组进行索引。
     
         花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;
         如果目标是二维数组,那么就是对应下标的行。
     
         花式索引跟切片不一样,它总是将数据复制到新数组中。
     """
     
     import numpy as np
     # 传入顺序索引数组
     x = np.arange(32).reshape((8, 4))
     print(x)
     print(x[[4, 2, 1, 7]])
     
     # 传入倒序索引数组
     x=np.arange(32).reshape((8,4))
     print (x[[-4,-2,-1,-7]])
     
     # 传入多个索引数组(要使用np.ix_)
     """
     原理:np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系
     将数组[1,5,7,2]和数组[0,3,1,2]产生笛卡尔积,就是得到
     (1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);
     """
     x=np.arange(32).reshape((8,4))
     print(x)
     print (x[np.ix_([1,5,7,2],[0,3,1,2])])
    

运行结果为:
在这里插入图片描述
在这里插入图片描述
7. 数组形状改变

"""
    reshape	不改变数据的条件下修改形状
         numpy.reshape(arr, newshape, order='C')
         order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
    flat	数组元素迭代器

    flatten	返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
    ravel	返回展开数组
"""

import numpy as np

print("****************************************flat********************************")
a = np.arange(9).reshape(3, 3)
print('原始数组:')
for row in a:
    print(row)

# 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print('迭代后的数组:')
for element in a.flat:
    print(element)

#
print("*********************************flatten**************************************")
a = np.arange(8).reshape(2, 4)

print('原数组:')
print(a)
print('\n')
# 默认按行

print('展开的数组:')
print(a.flatten())
print('\n')

print('以 F 风格顺序展开的数组:')
print(a.flatten(order='F'))


print("*********************************ravel*************************************")
a = np.arange(8).reshape(2, 4)

print('原数组:')
print(a)
print('\n')

print('调用 ravel 函数之后:')
print(a.ravel())
print('\n')

print('以 F 风格顺序调用 ravel 函数之后:')
print(a.ravel(order='F'))

运行结果为:
在这里插入图片描述

在这里插入图片描述

  1. 数组的拼接

     import numpy as np
     
     print("concatenste")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组:")
     print(a)
     print('\n')
     
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组:")
     print(b)
     print('\n')
     
     print("沿0轴连接两个数组")
     print(np.concatenate((a, b)))
     print('\n')
     print("沿1轴连接两个数组")
     print(np.concatenate((a, b), axis=1))
     
     print("stack")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组")
     print(a)
     print('\n')
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组")
     print(b)
     print('\n')
     
     print("沿0堆叠两个数组")
     print(np.stack((a, b), axis=0))
     print('\n')
     print("沿1轴堆叠两个数组")
     print(np.stack((a, b), axis=1))
     
     print("hstack")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组")
     print(a)
     print('\n')
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组")
     print(b)
     print('\n')
     
     print("水平堆积")
     c = np.hstack((a, b))
     print(c)
     print('\n')
     
     print("竖直堆积")
     d = np.stack((a, b))
     print(d)
     print('\n')
    

运行结果为:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 数组元素的添加与删除

      import  numpy as np
     
     print("append")
     a = np.array([[1,2,3] ,[4,5,6]])
     print("第一个数组")
     print(a)
     print('\n')
     print("向数组中添加元素")
     print(np.append(a,[7,8,9]))
     print('\n')
     
     print("沿0 轴添加元素")
     print(np.append(a,[[7,8,9]] ,axis=0))
     print('\n')
     
     print("沿1轴添加元素")
     print(np.append(a,[[5,5,5],[7,8,9]] ,axis=1))
     
     print("insert")
     a = np.array([[1,2],[3,4],[5,6]])
     print("第一个数组")
     print(a)
     print('\n')
     
     print("未传递AXIS 参数,在插入之前数组会被展开")
     print(np.insert(a ,3,[11,12]))
     print('\n')
     
     print("传递了axis 参数,会传播值数组来配入数组")
     print("沿0轴传播")
     print(np.insert(a,1,[11],axis=0))
     print("沿1轴传播")
     print(np.insert(a,1,11,axis = 1))
     
     
     print("delete")
     a = np.arange(12).reshape(3,4)
     print("第一个数组")
     print(a)
     print('\n')
     
     print("未传递axis参数,在插入之前输出的数组会被展开")
    

运行结果为:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(numpy)