创建一个新数组,有选择地以numpy形式复制旧数组的行

2024-04-18 04:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以numpy表示的2D数组,以及一个由n个元素组成的一维数组,其中ith元素指定原始数组的第I行应该进入新数组的次数。例如,如果我的二维数组是:

array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])

我的一维阵列是

^{pr2}$

那么我希望新的数组是:

array([[1, 1, 1],
       [1, 1, 1],
       [3, 3, 3],
       [5, 5, 5],
       [5, 5, 5],
       [5, 5, 5]])

我不知道如何有效地完成这项工作,有人有什么想法吗?在


Tags: numpy元素数组次数arraypr2ith
2条回答

一种基于^{}-

import numpy as np

A = np.array([[1, 1, 1],          # Sample Input Array
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])

lens = np.array([2, 0, 1, 0, 3])  # Sample Lengths of replications

mask = lens!=0                    # Mask of valid lengths
clens = np.cumsum(lens[mask])     # CUMSUM masked lenghts

# Setup Row-ID array for replications
id = np.zeros((1,clens[-1]),int).ravel()
id[clens[:-1]] = 1

# Finally perform replications for the final output
out = A[mask][id.cumsum(),:]

可以使用np.repeat()重复数组中的元素。在

In [174]: x.repeat(np.array([2, 0, 1, 0, 3]), axis=0)
Out[174]:
array([[1, 1, 1],
       [1, 1, 1],
       [3, 3, 3],
       [5, 5, 5],
       [5, 5, 5],
       [5, 5, 5]])

详细信息:

^{pr2}$

相关问题 更多 >