[转载] Python Numpy基础总结

参考链接: Python中的numpy.hypot

目录

 数组属性内存布局其他属性 数值类型dtype

   

   常量创建数组创建0和1或指定数字填充的数组从现有数据创建数组创建范围数组创建重复元素数组创建随机元素数组

   

   数组操作数组切片改变数组形状转置数组合并拆分数组查找数组唯一值数组转列表索引相关np.wherenp.choose

    

   

   数学函数统计函数常用统计函数取置信区间

   

   参考

 

 

 

数组属性 

内存布局 

方法描述ndarray.flags

     

       

      

     有关数组内存布局的信息。ndarray.shape

     

       

      

     数组维度的元组。ndarray.strides

     

       

      

     遍历数组时每个维度中的字节元组。ndarray.ndim

     

       

      

     数组维数。ndarray.data

     

       

      

     Python缓冲区对象指向数组的数据的开头。ndarray.size

     

       

      

     数组中的元素数。ndarray.itemsize

     

       

      

     一个数组元素的长度,以字节为单位ndarray.nbytes

     

       

      

     数组元素消耗的总字节数。ndarray.base

     

       

      

     如果内存来自其他对象,则为基础对象。 

a = np.array([1,2,3]) 

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

 

print(a.shape, b.shape)  数组a,b的维度元组

print(a.ndim, b.ndim)     数组a,b的维数

print(a.size, b.size)     数组a,b的元素个数

print(a.itemsize, a.nbytes)     数组a的一个元素长度和数组消耗总字节数

 

(3,) (2, 3)

1 2

3 6

4 12

 

其他属性  

方法描述ndarray.T

     

       

      

     转置数组。ndarray.real

     

       

      

     数组的真实部分。ndarray.imag

     

       

      

     数组的虚部。ndarray.flat

     

       

      

     数组上的一维迭代器。ndarray.ctypes

     

       

      

     一个简化数组与ctypes模块交互的对象。 

数值类型dtype 

数值类型 转换数组数值类型 

a = np.array([[1,1,3],[4,4,6]])

b = a.astype(np.float64)

 

b.dtype

dtype('float64')

#返回数值类型的name

b.dtype.name

'float64'

 

常量 

(正)无穷大:np.Inf, np.Infinity (负)无穷大:np.NINF 非数字:np.NAN, np.nan, np.NaN 负零:np.NZERO 正零:np.PZERO e:np.e π:np.pi 

np.isinf: 显示哪些元素为正或负无穷大。 np.isposinf: 显示哪些元素是正无穷大。 np.isneginf: 显示哪些元素为负无穷大。 np.isnan: 显示哪些元素不是数字。 np.isfinite : 显示哪些元素是有限的 - 不是(非数字,正无穷大和负无穷大)之一 

将数组中nan值替换成指定值

c = np.array([[1,2,3],[np.nan,5,6]])

print(c)

c[np.isnan(c)] = 1

print(c)

 

[[ 1.  2.  3.]

 [nan  5.  6.]]

[[  1.   2.   3.]

 [999.   5.   6.]]

 

常量 

创建数组 

创建0和1或指定数字填充的数组 

创建值为1的指定形状数组 

array = np.ones((2,3), dtype=int)

 

创建值为0的指定形状数组 

array = np.zeros((2,3), dtype=int)

 

创建与指定数组相同形状的1数组 

array_like = np.ones_like(array)

 

创建与指定数组相同形状的0数组 

array_like = np.zeros_like(array)

 

创建指定形状和填充值的数组 

array = np.full((2,3), 4)

 

创建与指定数组相同形状的填充值数组 

array_like = np.full_like(array, 3)

 

从现有数据创建数组 

从已有’数据’创建数组 

array = np.array([[1,2,3,7]])

 

根据列表数据创建数组 

l = [1,2,3]

array = np.asarray(l)

 

创建一个数组副本,原数组修改,副本不会变化 

array_copy = np.copy(array)

 

创建范围数组 

创建给定起始,间隔数组, 起始默认为0,间隔默认为1 

array = np.arange(0, 10, 2)

 

返回指定间隔内的等间隔数字,rendpoint控制是否包括终止点数字,retstep = True则返回范围数组和间隔 

array = np.linspace(0, 10, 50, endpoint=True)

 

生成网格数据 

lon = np.linspace(-180,180,37) # 网格精度为10°,共计37个经度点

lat = np.linspace(-90,90,19) # 网格精度为10°,共计19个纬度点

lons, lats = np.meshgrid(lon, lat)  #以lon,lat为参数生成网格数据

 

lats, lons = np.mgrid[-90:91:5., -180:181:5.] # 网格精度为5°,网格shape为(37,73)

 

创建重复元素数组 

>>> a = np.arange(3)

>>> a

array([0, 1, 2])

>>> np.repeat(a,3) # 重复元素3次

array([0, 0, 0, 1, 1, 1, 2, 2, 2])

>>> np.tile(a,3) # 重复数组3次

array([0, 1, 2, 0, 1, 2, 0, 1, 2])

>>> np.tile(a,(3,2)) # 重复数组3行2列

array([[0, 1, 2, 0, 1, 2],

       [0, 1, 2, 0, 1, 2],

       [0, 1, 2, 0, 1, 2]])

 

创建随机元素数组 

np.random.random(3)

array([0.4129063 , 0.94242888, 0.10129428])

np.random.random((2,3))  # 创建指定形状的0-1内随机元素数组

array([[0.80530845, 0.96161533, 0.89166972],

       [0.22920038, 0.84989557, 0.46865645]])

np.random.randint(5)  # 创建指定形状和元素大小的随机整数数组

4

np.random.randint(1,5, size=(2,3))

array([[3, 3, 1],

       [3, 3, 3]])

np.random.normal(10, 1, (2,3))  # 创建指定数值和标准差的随机数组

array([[ 9.03895038,  9.40851459, 10.22184416],

       [10.35129551,  7.85367586,  8.51376757]])

 

数组操作 

数组切片 

a = np.arange(9)

a[-1]                            # 最后一个元素

8

 

a[2:5]                           # 返回第2到第5个元素

array([2, 3, 4])

 

a[:7:3]                          # 返回第0到第7个元素,步长为3

array([0, 3, 6])

 

a[::-1]                          # 返回逆序的数组

array([8, 7, 6, 5, 4, 3, 2, 1, 0])

 

改变数组形状 

a = np.arange(8).reshape(2,4)

array([[0, 1, 2, 3],

       [4, 5, 6, 7]])

       

a = np.arange(8)

b = np.reshape(a, (2,4))

array([[0, 1, 2, 3],

       [4, 5, 6, 7]])

 

转置数组 

a = np.arange(4).reshape(2,2)

a.T

array([[0, 1],

       [2, 3]])

array([[0, 2],

       [1, 3]])

 

c = np.transpose(a)

array([[0, 2],

       [1, 3]])

#改变c 中元素,a会跟随变化

 

合并拆分数组 

按行(垂直方向)堆叠数组 

a = np.array([1, 2, 3])

b = np.array([2, 3, 4])

np.vstack((a,b))

array([[1, 2, 3],

       [2, 3, 4]])

 

按列(水平方向)堆叠数组 

a = np.array([1, 2, 3])

b = np.array([2, 3, 4])

np.hstack((a,b))

array([[1, 2],

       [2, 3],

       [3, 4]])

 

拆分数组 

a = np.arange(8).reshape(2,4)

np.vsplit(a, 2) # 垂直方向拆分成2部分

[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]])]

 

np.hsplit(a, 2) # 水平方向拆分成2部分

[array([[0, 1],

       [4, 5]]), 

 array([[2, 3],

       [6, 7]])]

 

查找数组唯一值 

返回数组唯一值 

a = np.array([[1,1,3],[4,4,6]])

np.unique(a)

[1 3 4 6]

 

返回数组唯一行 

a = np.arange(3)

b = np.tile(a, (3,1))

array([[0, 1, 2],

       [0, 1, 2],

       [0, 1, 2]])

       

np.unique(b, axis=0)

[[0 1 2]]

 

返回唯一值的原始数组索引 

a = np.array([[1,1,3],[4,4,6]])

u, indices = np.unique(a, return_inverse=True)

 

u

array([1, 3, 4, 6])

indices

array([0, 0, 1, 2, 2, 3], dtype=int64)

 

数组转列表 

a = np.array([[1,1,3],[4,4,6]])

a.tolist()

[[1, 1, 3], [4, 4, 6]]

 

索引相关 

np.where 

#符合指定条件的数组元素将被掩膜,剩余元素执行指定运算

a = np.arange(6).reshape(2,3)

b = np.where(a > 3, a, a*2)

 

array([[0, 1, 2],

       [3, 4, 5]])

b

array([[0, 2, 4],

       [6, 4, 5]])

       

b = np.where(a > 3, a, 999)

array([[999, 999, 999],

       [999,   4,   5]])   

         

b = np.where(a > 3, a, np.nan)   #这个在遥感影像绘图时可以将读取的nan值重新转换为nan

array([[nan, nan, nan],

       [nan,  4.,  5.]])

 

a = np.arange(6).reshape(2,3)

c = np.where(a!=2)

#返回指定条件的bool数组,如果是二维数组则返回两个元组分别表示二维的索引

(array([0, 0, 1, 1, 1], dtype=int64), array([0, 1, 0, 1, 2], dtype=int64))

 

np.choose 

a = np.arange(100).reshape(25,4)

mask = np.greater(a, 50) # 返回a中与50关系的同维bool数组

b = np.choose(mask, (0, a))  # mask部分等于原值a, 非mask部分等于0

 

更多判断函数 

方法描述allclose

     

       

      

     (a, b[, rtol, atol, equal_nan])如果两个数组在公差范围内按元素方式相等,则返回True。isclose

     

       

      

     (a, b[, rtol, atol, equal_nan])返回一个布尔数组,其中两个数组在公差范围内按元素方式相等。array_equal

     

       

      

     (a1, a2)如果两个数组具有相同的形状和元素,则为True,否则为False。array_equiv

     

       

      

     (a1, a2)如果输入数组的形状一致且所有元素均相等,则返回True。greater

     

       

      

     (x1, x2, /[, out, where, casting, …])按元素返回(x1 > x2)的真值。greater_equal

     

       

      

     (x1, x2, /[, out, where, …])按元素返回(x1 >= x2)的真值。less

     

       

      

     (x1, x2, /[, out, where, casting, …])按元素返回(x1 < x2)的真值。less_equal

     

       

      

     (x1, x2, /[, out, where, casting, …])按元素返回(x1 =< x2)的真值。equal

     

       

      

     (x1, x2, /[, out, where, casting, …])按元素返回(x1 == x2)。not_equal

     

       

      

     (x1, x2, /[, out, where, casting, …])按元素返回(x1 != x2)。 

数学函数 

 

 NumPy函数math函数功能np.emath.e自然常数np.pimath.pi圆周率np.ceil()math.ceil()进尾取整np.floor()nath.floor去尾取整np.around()四舍五入到指定精度np.rint()四舍五入到最近整数np.deg2rad()/radians()math.radians度转弧度np.rad2deg()/degrees()math.degrees()弧度转度np.hypot()math.hypot()计算直角三角形的斜边np.square()平方np.sqrt()math.sqrt()开平方np.power()math.pow()幂np.exp()math.exp()指数np.log()/log10()/log2()math.log()/log10()/log2()对数np.sin()/arcsin()math.sin()/asin()正弦/反正弦np.cos()/arccos()math.cos()/acos()余弦/反余弦np.tan()/arctan()math.tan()/atan()正切/反正切

 

统计函数 

常用统计函数 

 

 函数功能np.max/min(a, axis=None)np.nanmax/nanmin(a, axis=None)返回数组中的最大值/最小值忽略nan返回数组中的最大值/最小值np.argmax/argmin(a, axis=None)np.nanargmax/nanargmin(a, axis=None)返回数组中最大值和最小值的索引忽略nan返回数组中最大值和最小值的索引np.ptp(a, axis=None)返回数组中元素最大值与最小值的差np.median(a, axis=None)np.nanmedian(a, axis=None)返回数组元素的中位数忽略nan返回数组元素的中位数np.sum(a, axis=None)np.nansum(a, axis=None)按指定的轴求元素之和忽略nan按指定的轴求元素之和np.cumsum(a, axis=None)np.nancumsum(a, axis=None)按指定的轴求元素的累进和忽略nan按指定的轴求元素的累进和np.diff(a, axis=-1)按指定的轴返回相邻元素的差np.prod(a, axis=None)np.nanprod(a, axis=None)按指定的轴求元素之积忽略nan按指定的轴求元素之积np.mean(a, axis=None)np.nanmean(a, axis=None)按指定的轴返回元素的算数平均值忽略nan按指定的轴返回元素的算数平均值np.average()根据权重数据,返回数据数组所有元素的加权平均值np.var(a)np.nanvar(a)返回数组方差忽略nan返回数组方差np.std()np.nanstd()返回数组标准差忽略nan返回数组标准差np.corrcoef(a, b)返回两个数组的皮尔逊积矩相关系数

 

取置信区间 

#返回指定数组 指定轴的指定百分位数值

np.percentile(a, 99, axis=0)

 

可以通过interpolation关键字设置插值方法 附一个来自官方手册的各种插值效果的展示 

import matplotlib.pyplot as plt

 

a = np.arange(4)

p = np.linspace(0, 100, 6001)

ax = plt.gca()

lines = [

    ('linear', None),

    ('higher', '--'),

    ('lower', '--'),

    ('nearest', '-.'),

    ('midpoint', '-.'),

]

for interpolation, style in lines:

    ax.plot(

        p, np.percentile(a, p, interpolation=interpolation),

        label=interpolation, linestyle=style)

ax.set(

    title='Interpolation methods for list: ' + str(a),

    xlabel='Percentile',

    ylabel='List item returned',

    yticks=a)

ax.legend()

plt.show()

 

 

参考 

https://www.numpy.org.cn/reference/ https://blog.csdn.net/xufive/category_9506563.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值