Python:使用numpy.unique() 统计list或array中所包含的元素,即返回不重复元素

部署运行你感兴趣的模型镜像
import numpy as np
# a = [1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,6]
a = np.array([1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,6])
b,s ,t,w= np.unique(a,return_counts=True,return_index=True,return_inverse=True)
print(b)
print(s)
print(t)
print(w)

[1 2 3 4 5 6]
[0 1 2 3 4 5]
[0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 5]
[3 3 3 3 3 4]

用于统计数据集类别数和各类别样本个数非常方便。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们被要求找到NumPy数组中值为1的元素的索引。根据引用[1]中的示例,我们可以使用`np.where`布尔索引来实现。 引用[1]展示了`np.unique`的用法,但这里我们需要的是等于特定值(1)的索引,所以`np.where`更合适。 方法: 1. 使用布尔索引:先创建一个布尔数组(arr == 1),然后使用`np.nonzero`(`np.where`,但注意`np.where`在没有条件时返回非零元素的索引)来获取索引。 2. 直接使用`np.where(arr == 1)`。 注意:`np.where`返回的是一个元组,其中第一个元素是满足条件的索引数组(对于一维数组)。如果是多维数组,则每个维度都有一个索引数组。 示例: 假设有一个一维数组:arr = np.array([0, 1, 0, 1, 2, 1]) 我们想要值为1的元素的索引。 步骤: a. 创建布尔数组:mask = (arr == 1) b. 使用np.nonzero(mask) np.where(mask) 两者等价。 代码: indices = np.where(arr == 1)[0] # 因为一维数组,所以取元组的第一个元素 对于多维数组,我们需要考虑返回的索引格式。例如,二维数组会返回两个数组(行索引和列索引)。 但是,用户的问题中并没有说明数组的维度。根据问题描述,我们假设用户可能是一维数组,但也要考虑多维的情况。 如果用户想要将多维数组的索引作为坐标(每个索引是一个元组),那么可以直接使用`np.argwhere(arr == 1)`,它会返回每个匹配元素的坐标数组。 总结: 一维数组:使用`np.where(arr == 1)[0]` `np.flatnonzero(arr==1)` 多维数组:使用`np.argwhere(arr==1)` `np.where(arr==1)`(返回两个数组:行索引和列索引,可以组合成坐标) 根据问题,用户可能只需要一维数组的情况,但为了全面性,我们同时给出多维数组的解决方案。 另外,引用[3]提到用户正在学习NumPy,所以我们可以给出一些解释。 步骤: 1. 导入NumPy 2. 创建数组 3. 使用上述方法 示例代码: 一维: import numpy as np arr = np.array([0, 1, 0, 1, 2, 1]) indices = np.where(arr == 1)[0] # 者 indices = np.flatnonzero(arr == 1) 二维: arr2d = np.array([[0, 1], [1, 0], [1, 1]]) # 方法1:返回两个数组,分别表示行和列 rows, cols = np.where(arr2d == 1) # 此时,我们可以将行和列组合:list(zip(rows, cols)) # 方法2:直接使用np.argwhere,返回一个数组,每行是一个坐标 indices2d = np.argwhere(arr2d == 1) 注意:`np.where`在没有条件参数时返回非零元素的索引,有条件时返回满足条件的索引。 因此,我们可以这样回答:</think>### 在 NumPy 数组中查找值为 1 的元素索引 在 NumPy 中,有几种高效的方法可以找到数组中值为 1 的元素索引。以下是三种常用方法: #### 方法 1:使用 `np.where()`(推荐) ```python import numpy as np arr = np.array([0, 1, 2, 1, 0, 1, 3]) indices = np.where(arr == 1)[0] # [0] 获取第一个维度索引 print(indices) # 输出: [1 3 5] ``` - `np.where()` 返回满足条件的索引元组 - 对于一维数组,取 `[0]` 获取索引数组 - 支持多维数组索引查找[^1] #### 方法 2:使用布尔索引 ```python arr = np.array([[1, 0], [0, 1], [1, 1]]) bool_mask = (arr == 1) # 创建布尔掩码 indices = np.argwhere(bool_mask) # 获取坐标索引 print(indices) # 输出: # [[0 0] # [1 1] # [2 0] # [2 1]] ``` - 适用于多维数组 - 返回每个匹配元素的 `(row, col)` 坐标[^3] #### 方法 3:使用 `np.flatnonzero()` ```python arr = np.array([1, 0, 1, 1, 0, 2]) indices = np.flatnonzero(arr == 1) # 扁平化索引 print(indices) # 输出: [0 2 3] ``` - 将多维数组视为一维处理 - 返回展平后的索引位置 ### 性能说明 所有方法时间复杂度均为 $O(n)$,其中 $n$ 是数组元素总数。对于大型数组: - `np.where()` 通常最快 - 布尔索引最灵活(支持复杂条件) - `flatnonzero()` 适合处理展平数据[^4] --- ### 相关问题 1. 如何在 NumPy 中查找满足多个条件的元素索引(例如值大于 0 且小于 5)? 2. NumPy 中 `np.where()` 与 `np.argwhere()` 的主要区别是什么? 3. 如何统计 NumPy 数组中特定值(如 1)的出现次数? 4. 对于大型数组,如何优化 NumPy 的条件查询性能?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值