前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NumPy 获取唯一元素、出现次数、展平数组

NumPy 获取唯一元素、出现次数、展平数组

作者头像
double
发布2021-07-12 15:57:09
2.2K0
发布2021-07-12 15:57:09
举报
文章被收录于专栏:算法channel

你好 ,我是 zhenguo

本篇文章介绍2个 NumPy 高频使用场景,以及对应的API及用法,欢迎学习。

1 如何获得唯一元素和出现次数

使用np.unique可以很容易地找到数组中唯一的元素。

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

代码语言:javascript
复制
>>> a = np.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18, 19, 20])

可以使用np.unique打印数组中的唯一值:

代码语言:javascript
复制
>>> unique_values = np.unique(a)
>>> print(unique_values)
[11 12 13 14 15 16 17 18 19 20]

要获取NumPy数组中唯一值的索引(数组中唯一值的第一个索引位置的数组),只需在np.unique()中传递return_index参数:

代码语言:javascript
复制
>>> 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数组中唯一值的频率计数。

代码语言:javascript
复制
>>> unique_values, occurrence_count = np.unique(a, return_counts=True)
>>> print(occurrence_count)
[3 2 2 2 1 1 1 1 1 1]

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

代码语言:javascript
复制
>>> a_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [1, 2, 3, 4]])

可以通过以下方式找到唯一的值:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> unique_rows = np.unique(a_2d, axis=0)
>>> print(unique_rows)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

要获取唯一行、索引位置和出现次数,可以使用:

代码语言:javascript
复制
>>> 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不创建拷贝,所以它的内存效率很高。

如果从这个数组开始:

代码语言:javascript
复制
>>> x = np.array([[1 , 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

可以使用“flatten”将数组展平为1D阵列

代码语言:javascript
复制
>>> x.flatten()
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

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

代码语言:javascript
复制
>>> 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时,对新数组所做的更改将影响父数组。例如:

代码语言:javascript
复制
>>> 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]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 如何获得唯一元素和出现次数
  • 2 重塑和展平多维数组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档