基于子元素的值重复NumPy数组中的元素

k3fezbri  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(184)

我需要在下面的numpy数组 * 中重复元素,以使元素基于子元素的值重复。在执行重复时,我想将元素的第三个值重置为1。

arr = np.array([[A, B, 1],
[B, C, 2],
[C, D, 3],
[D, E, 1]])

所需输出:

[[A, B, 1],
[B, C, 1],
[B, C, 1],
[C, D, 1],
[C, D, 1],
[C, D, 1],
[D, E, 1]]

下面的代码运行良好,但是对于大型数据集,它会变得非常慢。~ 500 k长度。

_arr = primary_auto.to_records()
pm_arr = np.empty((0,3))

for i in range(len(_arr)):
    for nr in range(_arr[i][2]):
        pm_arr = np.append(pm_arr, np.array([[_arr[i][0],_arr[i][1],1]]), axis = 0)
z18hc3ub

z18hc3ub1#

使用numpy.repeat,然后分配1

arr = np.array([['A', 'B', 1],
['B', 'C', 2],
['C', 'D', 3],
['D', 'E', 1]])

out = np.repeat(arr, arr[:, 2].astype(int), axis=0)
out[:, -1] = 1

注意,由于字符串,所有的数组将是字符串,你需要转换为整数为repeat
输出量:

array([['A', 'B', '1'],
       ['B', 'C', '1'],
       ['B', 'C', '1'],
       ['C', 'D', '1'],
       ['C', 'D', '1'],
       ['C', 'D', '1'],
       ['D', 'E', '1']], dtype='<U11')
zwghvu4y

zwghvu4y2#

我用numpy找到了答案

import numpy as np
arr = np.array([["A", "B", 1],
["B", "C", 2],
["C", "D", 3],
["D", "E", 2]])
k = np.repeat(arr, arr[:, -1].astype(np.int32), 0)
k[:, -1] = 1
k
array([['A', 'B', '1'],
       ['B', 'C', '1'],
       ['B', 'C', '1'],
       ['C', 'D', '1'],
       ['C', 'D', '1'],
       ['C', 'D', '1'],
       ['D', 'E', '1'],
       ['D', 'E', '1']], dtype='<U11')

相关问题