numpy学习记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录学习numpy的过程。


一、Numpy是什么?

NumPy(Numerical Python 的简称)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的前身是 Numeric,这是一个由 Jim Hugunin 等人开发,专门用于数组运算的扩展模块,另一个和 Numeric 功能类似的扩展模块是 SciPy。由于 Numeric 中存在的一些问题,Jim Hugunin 发起了一个开发者团队开发了 NumPy,NumPy 将 Numeric 和 SciPy 整合进一个单独的库中。

NumPy 的主要特点包括:

  1. 强大的 N 维数组对象:NumPy 使用 ndarray 对象来存储和处理大型多维数组和矩阵,并提供大量的函数来操作这些数组。

  2. 广播功能:如前面所述,NumPy 提供了广播功能,这使得不同形状的数组能够执行算术操作。

  3. 用于整合 C/C++ 和 Fortran 代码的工具:NumPy 提供了许多用于整合 C、C++ 和 Fortran 代码的工具,使得开发者能够利用这些语言编写性能更高的代码,并集成到 Python 中。

  4. 线性代数、统计以及傅里叶变换:NumPy 提供了大量的函数,用于执行线性代数运算、统计运算和傅里叶变换等。

  5. 用于快速操作大型数组的函数:NumPy 提供了许多用于操作大型数组的函数,这些函数经过优化,可以高效地处理大量数据。

  6. 成熟的 C API:NumPy 的 C API 允许开发者使用 C 语言编写扩展模块,这些模块可以无缝地集成到 NumPy 中。

  7. 方便的 MATLAB 风格函数:NumPy 提供了许多与 MATLAB 类似的函数,这使得熟悉 MATLAB 的用户能够更容易地使用 NumPy。


       此外numpy开源的python科学计算库,用于快速处理任意维度的数组
Numpy中,存储对象是ndarray

二、使用步骤

1.numpy如何使用

1.1创建


np.array([])
 

1.2numpy的优势

内存块风格--一体式存储支持井行化运算效率高于纯Python代码--底层使用了C,内部释放了GIL

2 N维数组

2.1ndarray的属性

属性名字                 属性解释
ndarray.shape         数组维度的元组
ndarray.ndim           数组维数 
ndarray.size             数组中的元素数量
ndarray.itemsize      一个数组元素的长度(字节)
ndarray.dtype          数组元素的类型

import numpy as np
a=np.array([[2,3,4],[6,7,8]])
print(a.shape)
# 数组维数的元组 (2,3)
print(a.ndim)
# 数组维数,简单来说就是列表中套了几个列表
print(a.size)
# 数组中的元素数量 6
print(a.itemsize)
# 一个数组元素的长度(字节)
print(a.dtype)
# 数组元素的类型

 


 2.2ndarray的形状

 创建三维及以上数组时不好理解,以下仅展示三维数组的创建

b=np.array([[[1,2,3],[1,3,4]],[[2,5,6],[3,6,7]]])
print(b)
print(b.ndim)
print(b.shape)

 

怎么理解形状是(2,2,3)呢?

数组分为两大块,每个大块内又分为两小块,每个小块内有三个元素。

多维数组类似

2.3 ndarray的数据类型

   int

   float

   str

   ...

若不指定,则整数默认int64,小数默认float64

import numpy as np
a=np.array([[2,3,4],[6,7,8]],dtype=np.float64)
print(a.dtype)
#float64

 3.基本操作

3.1生成数组的方法

3.1.1生成0和1数组

 np.ones(type)    type=生成数组的形状

 np.zeros()

import numpy as np
a=np.ones([3,4])
print(a)
b=np.ones_like(a)
print(b)
c=np.zeros([4,5])
print(c)
d=np.zeros_like(a)
print(d)

 

3.1.2从现有的数组中去创建

np.array()———返回深拷贝

np.asrray ()———返回浅拷贝

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a)
b=np.array(a)
print(b)
c=np.asarray(a)
print(c)

 

3.1.3生成等间隔的数组

 np.linspace(start,stop,num,endpoint)

start 序列的起始值
stop 序列的终止值,
num 要生成的等间隔样例数量,默认为50
endpoint 序列中是否包含stop值,默认为ture

import numpy as np
print(np.linspace(0,100,11))

输出结果: [  0.  10.  20.  30.  40.  50.  60.  70.  80.  90. 100.]

np.arrange()

每间隔多少生成一个

import numpy as np
print(np.arange(0,10,2))

结果:[0 2 4 6 8] 

3.1.4生成随机数组

np.random.rand(d0, d1,.., dn)
返回[0.0,1.0)内的一组均匀分布的数。


np.random.uniform(low=0.0, high=1.0,size=None)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.参数介绍:
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型(表示几行几列)
返回值:ndarray类型,其形状和参数size中描述一致。


np.random.randint(low,high=None, size=None, dtype=')
从一个均匀分布中随机采样,生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

np.random.randn(d0, d1, .... dn)
功能:从标准正态分布中返回一个或多个样本值


np.random.normal(loc=0.0,scale=1.0, size=None)
loc: float
此概率分布的均值(对应着整个分布的中心centre)
scale: float
此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size: int or tuple of ints
输出的shape,默认为None,只输出一个值

import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5),dpi=100)
x=np.random.normal(1.7,1,10000000)
plt.hist(x,bins=1000)
plt.show()

np.random.standard_normal(size=None)返回指定形状的标准正态分布的数组。

3.2数组的索引、切片

直接索引
先对行进行索引,再进行列索引

import numpy as np
import matplotlib.pyplot as plt
a=np.random.standard_normal((5,6))
print(a)
print(a[0:2,0:2])
# print(a.resize([3,4]))

 

3.3形状修改


3.3.1.对象.reshape

不进行行列互换,产生新变量

import numpy as np
import matplotlib.pyplot as plt
a=np.random.standard_normal((5,6))
print(a)
print(a.reshape([6,5]))

3.3.2.对象.resize


进行行列互换,对原值进行更改

即把“对象”改为你想变得形状

3.3.3.对象.T进行行列互换 
import numpy as np
import matplotlib.pyplot as plt
a=np.random.standard_normal((5,6))
print(a)
print(a.T)

 这里可以理解为转置

 3.4.类型修改

对象.astype()

3.5.数组去重

np.unique()

3.6ndarray运算

3.6.1.逻辑运算


大于,小于直接进行判断赋值

满足要求,直接进行赋值

import matplotlib.pyplot as plt
import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print()

print(a>0)

print()
a[a>0]=1
print(a)

3.6.2通用判断函数


np.all()
所有满足要求,才返回True


np.any()
只要有一个满足要求,就返回True

import matplotlib.pyplot as plt
import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(np.all(a>0))
print(np.any(a>0))

 

3.6.3.三元运算符


np .where()满足要求,赋值第一个值,否则赋值第二个值

import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(np.where(a>0,1,0))


np.logical and()

import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(np.where(np.logical_and(a>0,a<1),1,0))

 


np.logical or()

import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(np.where(np.logical_or(a>1,a<0),1,0))

 

3.6.4.统计运算


min
max

import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(a.min())
print(a.max())

mean


std -----标准差
Var -----方差

import numpy as np
a=np.random.standard_normal([3,4])
print(a)
print(a.std())
print(a.var())

 


argmax---最大值下标
argmin--最小值下标

3.7 数组间运算


3.7.1.数组和数字是直接可以进行运算
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=3
print(a.shape)
print(a*b)
print(a/b)

 

3.7.2.数组和数组需要满足广播机制

在使用NumPy这样的科学计算库时,"广播"(Broadcasting)是一个非常重要的概念。广播是NumPy用于在不同形状的数组之间执行算术操作的一种机制,它使得NumPy能够像处理形状相同的数组一样处理形状不同的数组。

什么情况下可以进行广播计算?

下面举一些可以广播的例子与不能广播的例子

下面是不能广播的例子: 

 


3.7.3.矩阵乘法


np.dot--点乘

np.matmul--矩阵相乘

注意:两者之间在进行矩阵相乘时候,没有区别但是,dot支持矩阵和数字相乘

 

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.array([[1],[2],[3]])
print(np.matmul(a,b))
print(np.dot(a,b))

 

 下面将看到两者之间的差别

  • 25
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值