【Python】numpy_科学计算的基础库

简介

Numpy中的数组的存储效率和输入输出性能均优于Python中等价的基本数据结构

  Numpy是一个开源的Python的科学计算库,用于快速处理任意维度的数组。 

  Numpy支持常见的数组及矩阵的操作,对于同样的计算任务有着比Python更简洁的指令和更高效的算法。

  Numpy使用nadarray对象来处理多维数组,该对象是一个快速而灵活的数据容器。

 

安装依赖库

pip install numpy

 

 

引用

import numpy as np

 

 

常用对象

0、np.set_printoptions()用于控制Python中小数的显示精度

np.set_printoptions(precision=None, threshold=None,  linewidth=None, suppress=None, formatter=None)

 

参数

  precision:控制输出结果的精度(即小数点后的位数),默认值为8
  threshold:当数组元素总数过大时,设置显示的数字位数,其余用省略号代替(当数组元素总数大于设置值,控制输出值得个数为6个,当数组元素小于或者等于设置值得时候,全部显示),当设置值为sys.maxsize(需要导入sys库),则会输出所有元素
  linewidth:每行字符的数目,其余的数值会换到下一行
  suppress:小数是否需要以科学计数法的形式输出
  formatter:自定义输出规则

示例:

# 取消科学计数法
np.set_printoptions(suppress=True) 

 

 

1、 np.array()  新建数组 <可以直接把list转成ndarray>

语法:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

 

参数: 

  • object 要新建的数组对象
  • dtype = None 数组的数据类型
  • copy = True 对象是否被复制
  • order = None C:按行, F:按列, A:任意 默认 A
  • subok = False 返回的数组默认未基类数组,True 返回子类
  • ndmin = 0 指定返回数组的最小维数

 

示例: 

# coding:utf-8
import numpy as np
np.set_printoptions(suppress=True)  # 取消科学计数法


if __name__ == "__main__":
    """run"""

    np_a = np.array([1, 2, 3, 4])
    print("创建ndarray 数组:", np_a, "类型:", type(np_a), '   ', np_a.shape)

    np_b = np.array([[0.1, 0.2, 0.3], [11, 12, 13, 14]], dtype=object)
    print("创建ndarray 数组:", np_b, "类型:", type(np_b), ', shape对应维度元素个数', np_b.shape)

    np_c = np.array([1, 2, 3, 4], ndmin=3)
    print("创建ndarray 数组:", np_c, "类型:", type(np_c), 'ndmin,返回数组的最小维数, shape对应维度元素个数', np_c.shape)

 

 

执行结果

 

2、np.arange()   生成range数据

参数:

start 起始值(默认为0)
end 终止值(不包含)
step 步长,默认为1
dtype 返回ndarray的数据类型  

 

 

 

 

 

创建一维等差数组

    np_d = np.arange(1, 10, 2)
    print("生成range数据:", np_d, "类型:", type(np_d), '一维数组元素个数:', np_d.shape)

 

执行结果:

  

创建二维等差数组

obj.reshape(shape) 维度变换

    npd_a = np.arange(6).reshape(2, 3)
    print("创建二维等差数组:", npd_a)

 

执行结果

  

 

3、np.ones() 创建指定形状的数组,数组元素以 1来填充

示例

    np_e = np.ones(5, dtype=int)
    print("生成全是1的数组:", np_e)

 

执行结果:

  

 

4、np.zeros() 

创建指定形状的数组,数组元素以 0 来填充

示例:

    np_f = np.zeros((2, 5), dtype=int)
    print("生成全是0的数组:", np_f)

 

执行结果:

  

 

5、np.empty 函数返回一个具有指定形状和数据类型的未初始化数组,即数组的元素值取决于内存的状态

参数:

  shape 整数或者整数组成的元组 空数组的维度,例如:(2, 3)或者2
  dtype 数值类型,可选参数 指定输出数组的数值类型,例如numpy.int8。默认为numpy.float64。
  order {‘C’, ‘F’}   可选参数 是否在内存中以C或fortran(行或列)顺序存储多维数据

示例:

    np_g = np.empty([2, 2], dtype=int)
    print("生成指定形状的数组:", np_g)

 

执行结果:

  

 

6、numpy.random 创建随机数组

1) numpy.random.random(size=None)  该方法返回[0.0~1.0)之间的随机浮点数

    a = np.random.random(size=10)
    print("使用random创建一维数组:", a)

    b = np.random.random(size=(2, 3))  # 2行3列的数组
    print("创建二维数组:", b)

    c = np.random.random(size=(2, 3, 4))  # 两个3行4列
    print("创建三维的数组:", c)

 

执行结果:

  

2)numpy.random.randint(low,high,size)  该方法返回随机整数,如果只有low,返回范围是[0,low),如果有high,返回范围为[low,high)

    aa = np.random.randint(11, size=10)
    print("创建0~10一维随机整数:", aa)

    bb = np.random.randint(11, size=(2, 3))  # 2行3列
    print("创建0~10二维随机整数:", bb)

    cc = np.random.randint(5, 11, size=(2, 3, 4))  # 2个3行4列
    print("创建5~10三维随机整数:", cc)

 

执行结果:

  

 

3) numpy.random.randn(d0,d1...dn) 创建标准正态分布(期望为0,方差为1) :dn表示每个维度

    aaa = np.random.randn(3)
    print("创建一维:", aaa)

    bbb = np.random.randn(2, 3)
    print("创建二维:", bbb)

    ccc = np.random.randn(2, 3, 4)
    print("创建三维:", ccc)

 

执行结果:

  

 

4) numpy.random.normal(loc,scale,size)   创建指定期望和方差的正态分布:loc:期望,scale:方差

    aaaa = np.random.normal(1)
    print(aaaa)

    bbbb = np.random.normal(1, 2, 10)
    print(bbbb)

 

执行结果:

  

 

7、np.linspace   创建等差数列

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

 

参数:

  start:返回样本数据开始点
  stop:返回样本数据结束点
  num:生成的样本数据量,默认为50
  endpoint:True则包含stop;False则不包含stop
  retstep:If True, return (samples, step), where step is the spacing between samples.(即如果为True则结果会给出数据间隔)
  dtype:输出数组类型
  axis:0(默认)或-1

示例:  

    npl_a = np.linspace(1, 20, 8, endpoint=False, dtype=int)  # endpoint=False 不包括100
    print("从[1-20)之间的前8个整数等差数列:", npl_a)

 

 

执行结果:

  

 

8、logspace  创建等比数列 

np.logspace(start,stop,num,endpoint,base,dtype) 

 

参数:

  start:代表序列的起始值。
  stop:代表序列的终止值。
  num:生成的序列数个数。
  endpoint:布尔类型值,默认是true。如果为true, 'stop'是最后一个样本;否则,它不包括在内。
  base:代表序列空间的底数,默认基底为10。
  dtype:代表序列数组项的数据类型。

示例

    # 以10为基底的等比数列
    ab = np.logspace(-5, 5, 11)
    abc = np.log10(ab)
    print(ab)
    print(abc)

 

执行结果

 

9、numpy.full(shape, val)  生成指定形状的数值都是val的array

    npf = np.full((2, 2), 8)
    print("生成全是2的数组:", npf)

 

执行结果:

  

10、numpy.eye(n)  生成单位矩阵

    npe = np.eye(5, dtype=int)
    print("生成单位数矩:", npe)

 

执行结果:  

  

 

11、numpy.ones_like(a) 按数组a的形状和类型生成全1的数组

12、numpy.zeros_like(a)  按数组a的形状和类型生成全0的数组

13、numpy.full_like (a, val)  按数组a的形状和类型生成数值全是val的数组

 

数组维度变换

  obj.reshape(shape)
  obj.resize(shape) 跟numpy.reshape()的区别在于resize()没有返回值,直接对原始数组进行修改
  obj.swapaxes(ax1, ax2) 将两个维度调换,numpy中的维数从0开始索引,即如果是个二维的array,则维度的索引值为0 1
  obj.flatten() 对数组进行降维,从名字也可以看出,就是把数组打平

数组类型转换

  obj.astype(new_type)
  obj.tolist() 把ndarray转换成list

 

对象属性

.ndim 秩,轴的数量或维度数量
.shape 数组的维度,对于矩阵(n,m)
.size 数组元素总个数
.dtype 元素类型
.itemsize 每个元素大小,字节为单位
.flags 对象的内存信息
.real ndarray元素的实部
.imag ndarray元素的虚部

 

 

 

 

 

 

 

 

 

数学运算

np.sqrt()           #开平方根
np.abs()            #求模值
np.square()         #取平方
np.log()            #自然对数
np.log2()           #以2为底的对数
np.log10()          #以10为底的对数
np.exp()            #指数
np.sign()           #取符号
np.maximum(a,b)     #最大值
np.minimum(a,b)     #最小值
np.fmax()           #取最大值,返回ndarray
np.fmin()           #取最小值,返回ndarray
np.copysign(a,b)    #将b中各元素的符号赋值给数组a的对应元素

 

 

统计函数

np.sum(a, axis = None)                #求和
np.mean(a, axis = None)               #求均值
np.std(a, axis = None)                #求标准差
np.average(a, axis = None, weights)   #按权重求均值
np.min(a)                             #最小值
np.max()                              #最大值
np.argmin()                           #最小值下标
np.argmax()                           #最大值下标
np.unravel_index(index, shape)        #根据shape将一维下标index转成多维下标
np.median(a)                          #中值
np.ptp(a)                             #最大值和最小值的差

 

 

 


拓展

数组定义

  单行或单列的数组,称为一维数组

  多行多列(含2行2列)的数组是二维数组

 

 

 

 
posted @ 2023-08-04 14:28  Phoenixy  阅读(59)  评论(0编辑  收藏  举报