Python Numpy基础总结

数组属性

内存布局
方法描述
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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值