numpy用法
2021-12-05 About 2 min
# 索引
# 采样
x是一维数组,x[i]
,为x的第i个元素,np支持数组索引,x[[i, j, k]]
,得到[x[i], x[j], x[k]]
。如果x[]
中传入的数组大于一维,得到的结果类似于将数组flatten后作为索引,得到的结果再reshape成索引数组的形状。
x = np.arange(12)
y = np.array([[1, 2, 3, 4], [2, 3, 4, 7]])
x[y] # y必须是np数组才行
# array([[1, 2, 3, 4],
# [2, 3, 4, 7]])
1
2
3
4
5
2
3
4
5
# np.clip
# numpy.clip(a, a_min, a_max, out=None, **kwargs)
a = np.arange(5)
np.clip(a, 1, 3) # [1,1,2,3,3]
1
2
3
2
3
# np.random.shuffle
原地打乱数组元素的顺序
x = np.arange(10)
np.random.shuffle(x)
1
2
2
# np.cumsum
计算列表元素的累积和
a = np.array([[1,2,3], [4,5,6]])
# 未指定axis则会先flatten,再计算cumsum
np.cumsum(a) # 1, 3, 6, 10, 15, 21
# 沿指定轴计算
np.cumsum(a,axis=0) # [[1, 2, 3], [5, 7, 9]]
1
2
3
4
5
2
3
4
5
# np.diff
计算列表相邻元素之间的差值
# numpy.diff(a, n=1, axis=-1, prepend=<no value>, append=<no value>)
x = np.array([1, 2, 4, 7, 0])
np.diff(x) # [1, 2, 3, -7]
# n表示递归地做n次diff
np.diff(x, n=2) # [1, 1, -10]
# prepend=1表示在a的最后一维的所有列表前添加一个1,再计算cumsum。append同理
np.diff(x, prepend=1) # [0, 1, 2, 3, -7]
1
2
3
4
5
6
7
2
3
4
5
6
7
# np.ma.masked_where
得到列表中满足条件的元素被设为True的掩码
# ma.masked_where(condition, a, copy=True)
a = np.arange(4)
c = ma.masked_where(a <= 2, a)
# c: masked_array(data=[--, --, --, 3],
# mask=[ True, True, True, False],
# fill_value=999999)
c[0]=99
# masked_array(data=[99, --, --, 3],
# mask=[False, True, True, False],
# fill_value=999999)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- masked_equal(a, value, copy=True)
- masked_less_equal(a, value, copy=True)
- masked_inside(a, v1, v2, copy=True)
- ma.masked_invalid(a, copy=True)
- ...
填充被masked的位置,使用np.ma.filled
x = np.ma.array([1,2,3,4,5], mask=[0,0,1,0,1], fill_value=-999)
x.filled()
# array([ 1, 2, -999, 4, -999])
1
2
3
2
3
# np.histogram
hist, bin_edge = numpy.histogram(a, bins=10, range=None, weights=None, density=None)
- a: 列表
- bins: 划分出的区间数
- range: 总区间的范围
- weights: 和a大小相同,决定a中每个元素在bin中的计数次数。
- density: 默认为False,对数据进行计数。若为True,则计算概率密度。即有
np.sum(hist * np.diff(bin_edges)) == 1