You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy Unique生成对应元素重复次数的数组?

问题描述

我有一个特定格式的txt文件,使用以下代码读取并处理数据:

import numpy as np

name_k, let_k = np.loadtxt(path + 'known_mass_period.txt', skiprows = 1, unpack = True, usecols = (0,1), dtype = str)
m_k, p_k = np.loadtxt(path + 'known_mass_period.txt', skiprows = 1, unpack = True, usecols = (2,3))

# 过滤掉质量为0的数据
name_k, let_k, m_k, p_k = name_k[m_k>0], let_k[m_k>0], m_k[m_k>0], p_k[m_k>0]

# 获取唯一名称及相关统计数组
names, ind, xx, n = np.unique(name_k, return_index = True, return_inverse = True, return_counts = True)

目前通过np.unique已经得到了唯一名称数组names、索引数组ind、逆索引数组xx以及各名称出现次数数组n。我需要生成一个新数组new_n,其中每个名称对应的出现次数会重复对应次数——比如第一个名称14Her出现2次,new_n中对应位置就是[2,2];47UMa出现3次则对应[3,3,3],以此类推。请问如何利用np.unique得到的这些数组实现这个需求?

解决方案

有两种简洁的方法可以实现:

方法一:使用np.repeat直接重复次数值

n数组已经存储了每个唯一名称的出现次数,直接用np.repeat将每个元素重复对应次数即可:

new_n = np.repeat(n, n)

方法二:借助逆索引数组xx映射

逆索引数组xx中的每个元素,对应原数组name_k中元素在names数组里的索引。直接用这个索引去取n中对应的次数值,就能得到每个位置的重复次数:

new_n = n[xx]

两种方法都能生成符合要求的new_n数组,其中方法二的逻辑更贴合你已经获取的xx数组的用途,执行效率也很高。

内容的提问来源于stack exchange,提问作者Alessandro Ruggieri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:32:43