强基初中数学&学Python——第231课 数字和数学第三方模块NumPy:菜鸟入门(7)


生成随机数的数组  随机数生成的使用是许多数值和机器学习算法的配置和评估的重要部分。无论是在人工神经网络中随机初始化权重、将数据拆分为随机集,还是随机打乱数据集,都必须能够生成随机数(实际上是可重复的伪随机数)。用Generator.integers,可以生成从低(包含)到高(不包含)的随机整数。可以将endpoint设置为True,以使高数值包含在内。  可以使用以下命令生成0到4之间的2 x 4随机整数数组:  要阅读更多随机整数发生的信息,请打开:https://numpy.org/doc/stable/reference/random/index.html#numpyrandom。

如何获取唯一项目和计数  本节介绍np.unique()  使用np.unique可以很容易地找到数组中的唯一元素。  例如,下面的数组:

>>> a = np.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18, 19, 20])

  可以使用np.unique来排除数组中的重复值形成值唯一的数组(相当于Python的集合):

>>> unique_values = np.unique(a)
>>> print(unique_values)
[11 12 13 14 15 16 17 18 19 20]

  np.unique()传入数组外,还传入return_index参数,这样就得到的是值首次出现的下标数组。

>>> unique_values, indices_list = np.unique(a, return_index=True)
>>> print(indices_list)
[ 0  2  3  4  5  6  7 12 13 14]

  同样地,往np.unique()传递return_counts参数可以获得数组中每个值的出现频率(次数)。

>>> unique_values, occurrence_count = np.unique(a, return_counts=True)
>>> print(occurrence_count)
[3 2 2 2 1 1 1 1 1 1]

  这个方法同样适合2D数组!例如下面的数组:

>>> a_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [1, 2, 3, 4]])

  也可以这样排除重复值:

>>> unique_values = np.unique(a_2d)
>>> print(unique_values)
[ 1  2  3  4  5  6  7  8  9 10 11 12]

  如果未传递轴参数,2D数组将被展平。  如果要获取唯一的行或列,请确保传递axis参数。若要查找唯一的行,请指定axis=0,若是列,指定axis=1。

>>> unique_rows = np.unique(a_2d, axis=0)
>>> print(unique_rows)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

  当输入axis参数时,行或列作为整体考虑,也就是说行或列中的重复元素不在过滤项目中;结果按从小到大排列而不管原来在什么位置:  要获取唯一行、索引位置和引用计数,可以使用:

>>> unique_rows, indices, occurrence_count = np.unique(
...      a_2d, axis=0, return_counts=True, return_index=True)
>>> print(unique_rows)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
>>> print(indices)
[0 1 2]
>>> print(occurrence_count)
[2 1 1]

  可见,返回按结果,索引,次数的顺序,与输入参数的顺序无关。  要了解有关查找数组中唯一元素的更多信息,请参阅unique:https://numpy.org/doc/stable/reference/generated/numpy.unique.html#numpy.unique。