关于python:NumPy-获取唯一元素出现次数展平数组

42次阅读

共计 1716 个字符,预计需要花费 5 分钟才能阅读完成。

1 如何取得惟一元素和呈现次数
应用 np.unique 能够很容易地找到数组中惟一的元素。

例如,如果从这个数组开始:

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

能够应用 np.unique 打印数组中的惟一值:

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

要获取 NumPy 数组中惟一值的索引(数组中惟一值的第一个索引地位的数组),只需在 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 参数与数组一起传递,以获取 NumPy 数组中惟一值的频率计数。

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

这也实用于二维数组!如果从这个数组开始:

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]

如果未传递 axis 参数,则二维数组将被展平。

如果要获取惟一的行或列,请确保传递 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]]

要获取惟一行、索引地位和呈现次数,能够应用:

>>> 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]

2 重塑和展平多维数组
有两种罕用的展平数组的办法:.flatten() 和.ravel()。

两者之间的次要区别在于,应用 ravel()创立的新数组实际上是对父数组的援用(即“视图”)。这意味着对新数组的任何更改也将影响父数组。因为 ravel 不创立拷贝,所以它的内存效率很高。

如果从这个数组开始:

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

能够应用“flatten”将数组展平为 1D 阵列

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

应用“flatten”时,对新数组的更改不会更改父数组。

>>> a1 = x.flatten()
>>> a1[0] = 99
>>> print(x)  # Original array
[[1  2  3  4]
 [5  6  7  8]
 [9 10 11 12]]
>>> print(a1)  # New array
[99  2  3  4  5  6  7  8  9 10 11 12]

然而应用 ravel 时,对新数组所做的更改将影响父数组。例如:

>>> a2 = x.ravel()
>>> a2[0] = 98
>>> print(x)  # Original array
[[98  2  3  4]
 [5  6  7  8]
 [9 10 11 12]]
>>> print(a2)  # New array
[98  2  3  4  5  6  7  8  9 10 11 12]

最近整顿了几百 G 的 Python 学习材料,蕴含新手入门电子书、教程、源码等等,收费分享给大家!想要的返回“Python 编程学习圈”,发送“J”即可收费取得

正文完
 0