Fork me on GitHub

Python常用函数

np.flatnonzero()

该函数返回矩阵的展平版本中非零元素的位置

1
2
3
import numpy as np
a = np.arange(12).reshape(3 , 4)
np.flatnonzero(a)

结果如下:

array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int64)

np.random.choice()

numpy.random.choice(a, size=None, replace=True, p=None)

从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组

replace:True表示可以取相同数字,False表示不可以取相同数字

数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

1
2
a = np.random.choice(5 , 3) #相当于(0 , 5 , 3)
a

结果如下:

array([0, 0, 3])

np.sum()

1
2
3
4
5
a = np.arange(24).reshape(4 , 2 , 3)
b = np.sum(a , 0)
c = np.sum(a , 1)
d = np.sum(a , 2)
print(b.shape , c.shape , d.shape)

结果如下:

(2, 3) (4, 3) (4, 2)

如果第二个参数不填的话,默认将所有元素全部加起来。

第二个参数是几,就在第几个维度上求和,这在python其他函数中也是一样的情况。

np.argsort()

返回数组中按一定顺序排列后的引索值

1
2
3
4
5
6
7
8
a = np.array([[3 , 1 , 4] , [4 , 9 , 0] , [1 , 2 ,9]])
print(a)
print()
print(np.argsort(a , axis = 1)) #将每行排列
print()
print(np.argsort(a)) #默认将每行排列
print()
print(np.argsort(a , axis = 0)) #将每列排列

结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[[3 1 4]
[4 9 0]
[1 2 9]]

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

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

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

上面是按从小到大排列的
若按从大到小排列:
1
2
a = np.array([4 , 9 , 0])
np.argsort(-a)

结果:

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

np.bincount(x , weights , minlength)

返回数组中元素的出现重复次数

1
2
a = np.array([4 , 9 , 0 , 0 , 3 , 2])
print(np.bincount(a))

结果如下:

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

这个函数首先输入的数组的值为int类型,而且数组必须是一维的,然后他会找出数组中的最大值(比如本例中9),然后输出就是一个长度>=max的一维数组,本例中,0出现2次,1,5,6,7,8均未出现,其中4,3,2,9均出现1次。

参数weigths 的形状是array_link(x),作用是如果weights 被指定,那么x就会被加权,也就是说,如果值n发现在位置i,那么out[n] += weight[i]而不是out[n] += 1
比如:

1
2
3
4
w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6])
# 我们可以看到x中最大的数为4,因此bin的数量为5,那么它的索引值为0->4
x = np.array([2, 1, 3, 4, 4, 3])
np.bincount(x, weights=w)

结果如下:

array([ 0. , 0.5, 0.3, -0.4, 1.7])

其中3分别赋予了(0.2 + (-0.6))的权值,4为(1.0 + 0.7)的权值。

minlength 指定输出最小的长度如果数组中的最大值小于了minlength,那么少于的部分被补零。

1
2
a = np.array([0 , 2 , 3 , 2])
print(np.bincount(a , minlength = 10))

结果如下:

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

argmax()

先看一维

1
2
3
import numpy as np
a = np.array([3, 1, 2, 4, 6, 1])
print(np.argmax(a))

结果:

4

即返回的是最大值的位置

再看二维

1
2
3
4
5
6
a = np.array([[1, 5, 5, 2],
[9, 6, 2, 8],
[3, 7, 9, 1]])
print(np.argmax(a , axis = 0))
print()
print(np.argmax(a , axis = 1))

结果:
1
2
3
[1 2 2 1]

[1 0 2]

其余更多维度的都是大同小异