学习Numpy

一、nparray多维数组对象

1. 生成列表

np.array(list)
# 将输入的数据转化为ndarry类型,list可以为列表,数组,元组类型

np.asarray(list)
# 与np.array()没什么大的区别

numpy.arange([ start,] stop,[ step,] dtype = None)
"""
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值12)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值13)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
起点的值是闭区间,终点的值是开区间
""

2. 生成矩阵

np.random.randn(2, 3) 
# 生成一个符合正态分布的2×3的数组,randn(d1,d2,d3...)可以继续指定维度

np.random.rand(2, 3)
# 同理生成一个2×3的数组,不过范围限定为[0, 1):包含0,不包含1

np.ones(d1, d2, ...)
# 生成一个全为1的多维矩阵

np.ones_like(x)
# 根据矩阵x的维度,生成全为1的多维矩阵

np.zeros(d1, d2, ...)
np.zeros_like(x)
# 与前面的ones()函数类似,不过生成全为0的矩阵

np.empty(d1, d2, ...)
np.empty_like(x)
# 生成无初始值的矩阵,但并不安全,可能返回未初始化的垃圾值

np.full(shape, fill_value, dtype=None, order='C')
"""
shape:int 或者 int元组。这里的shape,如果是多维,记得用括号括起来。
fill_value:填充到数组中的值
"""
numpy.full_like(a, fill_value, dtype=None, order='K', subok=True)[source]
"""
参数:
a : array_like,用a的形状和数据类型,来定义返回数组的属性。
fill_value : 标量,数组中元素的值
dtype : 数据类型, 可选。覆盖结果的数据类型。
"""

numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
# 返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.
np.identity(n,dtype=None)
# 只能创建方阵

3. Numpy的数组运算

  • 带有标量计算的算术操作,会把计算参数传递给数组的每一个元素。

    arr = np.arange(10)
    1 / arr
    arr * 0.5  
    # 会对arr中每一个元素进行运算
    

4. 索引和切片

  • 数组的切片都是原数组的视图,这意味着数组并不是被复制了,任何对于视图的修改最后都会反映到原数组上。

    arr[:2, 1:]
    # 取前2行(包含第0,1行),第1列之后的值(从第1列开始,而不是第二列)
    # 这里的行列都是从0开始的,仍然遵循起点都是闭合,终点都是开区间。
    
  • 布尔索引:数组的比较操作都是可以量化的

    names = np.array['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']
    names = 'Bob'
    # 会得到一个Bool类型的数组
    
    # 这个Bool类型的数组,可以放到其他数组作为索引,来提取对应位置为True的元素
    data = np.random.randn(7, 4)
    data[names = 'Bob', 3]
    """
    当然如果想提取除了'Bob'外的元素,可以用names != 'Bob',或者:
    cond = names == 'Bob'
    data[~cond]
    """ 
    
    # 还可以用两个或者多个组合来限制条件
    mask = (names == 'Bob')|(names == 'Will')
    # 使用Bool数组作为索引时,生成的都是拷贝数据
    # Python的关键词and和or对Bool数组没有用,请使用&(and)和|(or)
    
  • 神奇的索引

    arr = np.empty((8,4))
    for i in range(8):
    	arr[i] = i
    # 这里相当于给每一行赋值,所赋的值也是一样的
    
    arr([1, 5, 7, 2], [0, 3, 1, 2])
    # 这里是进行取值,行列会一一对应
    # 共取了4个值,对应位置分别为:(1, 0), (5, 3), (7, 1), (2, 2)
    

5. 数组转置和转轴

arr = np.arange(15).reshape((3,5))
arr.T
# 进行转置

arr.transpose(1, 0)
# 如果不带参数,作用就是转置
"""
(1)对于二维数组,例如我们要取arr第0行第2列的数据,我们用arr[0][2],那么这里的[0]指代第0维度,[2]指代第1维度。
(2)arr.transpose(1, 0)的作用就是将arr中的数据所处的维度进行变换,即原来第0维度变为第1维度,第1维度变为第0维度;在二维数组中等价于转置。令data = arr[0][2],经过transpose(1, 0)处理后,那么arr[2][0] = data。显然,如果是arr.transpose(0, 1),就相当于啥也没做咯
(3)如果是3维数组,同理了。arr[1][2][3],[1]处于第0维度,[2]处于第1维度,[3]处于第2维度。
语句arr.transpose(1, 0, 2)就是将第1维度和第0维度进行调换咯。
"""

arr.swapaxes(1, 2)
# swapaxes()作用就是交换2个维度,作用于transpose一样;不过一次只能交换2个维度。
# 这个必须带参数

二、numpy的通用函数

arr = np.arange(10)

# 开平方
np.sqrt(arr)

# 以e为底的指数
np.exp(arr)

np.max(a, axis=None, out=None, keepdims=False)
"""
求序列的最值,最少接受一个参数
axis默认为axis=0即列向,如果axis=1即横向
"""

np.maximum(X, Y, out=None)
"""
X和Y逐位进行比较,选择最大值;最少接受两个参数
X,Y的维度需要一致,返回的数组中每个都是X,Y中最大值。
""" 

1. 一元通用函数

函数名描述
np.abs(ndarray)
np.fabs(ndarray)
计算绝对值
np.sqrt(ndarray)计算每个元素的平方根(等价于arr**0.5)
np.square(ndarray)计算每个元素的平方(等价于arr**2)
np.mean(ndarray)计算平均值
np.exp(ndarray)计算每个元素的自然对数e^x
np.log(ndarray)
np.log10(ndarray)
np.log2(ndarray)
np.log1p(ndarray)
自然对数(e为底、10为底、2为底、ln(x+1))
np.sign(ndarray)符号函数
np.ceil(ndarray)
np.floor(ndarray)
np.rint(ndarray)
计算每个元素的最高整数值,相当于[x]
计算每个元素的最小整数值,相当于[x]-1
将元素保持整数位,并保持dtype
np.modf(ndarray)将数组的整数和小数部分以数组的形式返回
np.isnan(ndarray)判断数组中是否有元素为NaN,返回Bool类型
np.isfinite(ndarray)
np.isinf(ndarray)
判断有穷、无穷数组,返回Bool类型
np.cos(ndarray)
np.cosh(ndarray)
np.sin(ndarray)
np.sinh(ndarray)
np.tan(ndarray)
np.tanh(ndarray)
三角函数
np.arccos(ndarray)
np.arccosh(ndarray)
np.arcsin(ndarray)
np.arcsinh(ndarray)
np.arctan(ndarray)
np.arctanh(ndarray)
反三角函数
np.logical_not(ndarray)对数组的元素按位取反

2. 二元通用函数

函数名描述
np.add(arr1, arr2)将对应数组进行相加
np.subtract(arr1, arr2)在第二个数组中,将第一个数组中包含的元素去除
np.multiply(arr1, arr2)将数组对应元素相乘
np.divide(arr1, arr2)
np.floor_divide(arr1, arr2)
除或整除
np.power(arr1, arr2)将第二个数组的元素作为第一个数组对应元素的幂次方
np.maximum(arr1, arr2)
np.fmax(arr1, arr2)
逐个元素计算最大值(fmax忽略NaN)
np.minimum(arr1, arr2)
np.fmin(arr1, arr2)
逐个元素计算最小值(fmin忽略NaN)
np.mod(arr1, arr2)按元素的求模计算
np.copysign(arr1, arr2)将第一个数组的符号值改为第二个数组的符号值
np.greater(arr1, arr2)
np.greater_equal(arr1, arr2)
np.less(arr1, arr2)
np.less_equal(arr1, arr2)
np.equal(arr1, arr2)
np.not_equal(arr1, arr2)
进行逐个元素的比较,返回Bool数组。(与数组符号>、>=、<、<=、== 、!=效果一致)
np.logical_and(arr1, arr2)
np.logical_or(arr1, arr2)
np.logical_xor(arr1, arr2)
进行逐个元素的逻辑操作(与逻辑操作符&、|、^效果一致)

3. 数学和统计方法

计算函数说明
ndarray.mean( axis=0 )求平均值
ndarray.sum( axis= 0)求和
ndarray.cumsum( axis=0)
ndarray.cumprod( axis=0)
累加
累乘
ndarray.std()
ndarray.var()
方差
标准差
ndarray.max()
ndarray.min()
最大值
最小值
ndarray.argmax()
ndarray.argmin()
最大值索引最小值索引
ndarray.any()
ndarray.all()
是否至少有一个True
是否全部为True
ndarray.dot( ndarray)计算矩阵内积
ndarray.sort(axis=0)排序,返回源数据

4. 线性代数

5. 其他函数

  • numpy.meshgrid函数的基本用法
"""
用法:
  [X,Y]=meshgrid(x,y)
  [X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
  [X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
这里,主要以[X,Y]=meshgrid(x,y)为例,来对该函数进行介绍。
假设x是长度为m的向量,y是长度为n的向量,则最终生成的矩阵X和Y的维度都是 nm (注意不是mn)。
"""

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
m, n = (5, 3)
x = np.linspace(0, 1, m)
y = np.linspace(0, 1, n)
X, Y = np.meshgrid(x,y)
 

# 查看向量x和向量y
x
out:
array([ 0. , 0.25, 0.5 , 0.75, 1. ])

y
out:
array([ 0. , 0.5, 1. ])
 
#查看矩阵X和矩阵Y
X
out:
array([[ 0. , 0.25, 0.5 , 0.75, 1. ],
[ 0. , 0.25, 0.5 , 0.75, 1. ],
[ 0. , 0.25, 0.5 , 0.75, 1. ]])

Y
out:
array([[ 0. , 0. , 0. , 0. , 0. ],
[ 0.5, 0.5, 0.5, 0.5, 0.5],
[ 1. , 1. , 1. , 1. , 1. ]])

# 可以通过在matplotlib中进行可视化,来查看函数运行后得到的网格化数据的结果
plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()
  • numpy.where函数
    • np.where(condition, x, y)

      满足条件(condition),输出x,不满足输出y。

    • np.where(condition)

      只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标

>>> arr = np.random.randn(4, 4)
>>> arr > 0
array([[False,  True,  True,  True],
       [ True, False,  True,  True],
       [ True, False, False, False],
       [False, False, False, False]])
>>> np.where(arr > 0, 3 ,-3)
array([[-3,  3,  3,  3],
       [ 3, -3,  3,  3],
       [ 3, -3, -3, -3],
       [-3, -3, -3, -3]])
>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5)				# 返回索引
(array([2, 3, 4]),)   
>>> a[np.where(a > 5)]  		# 等价于 a[a>5]
array([ 6,  8, 10])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值