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

k3fezbri  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(241)

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

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

所需输出:

  1. [[A, B, 1],
  2. [B, C, 1],
  3. [B, C, 1],
  4. [C, D, 1],
  5. [C, D, 1],
  6. [C, D, 1],
  7. [D, E, 1]]

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

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

z18hc3ub1#

使用numpy.repeat,然后分配1

  1. arr = np.array([['A', 'B', 1],
  2. ['B', 'C', 2],
  3. ['C', 'D', 3],
  4. ['D', 'E', 1]])
  5. out = np.repeat(arr, arr[:, 2].astype(int), axis=0)
  6. out[:, -1] = 1

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

  1. array([['A', 'B', '1'],
  2. ['B', 'C', '1'],
  3. ['B', 'C', '1'],
  4. ['C', 'D', '1'],
  5. ['C', 'D', '1'],
  6. ['C', 'D', '1'],
  7. ['D', 'E', '1']], dtype='<U11')
展开查看全部
zwghvu4y

zwghvu4y2#

我用numpy找到了答案

  1. import numpy as np
  2. arr = np.array([["A", "B", 1],
  3. ["B", "C", 2],
  4. ["C", "D", 3],
  5. ["D", "E", 2]])
  6. k = np.repeat(arr, arr[:, -1].astype(np.int32), 0)
  7. k[:, -1] = 1
  8. k
  1. array([['A', 'B', '1'],
  2. ['B', 'C', '1'],
  3. ['B', 'C', '1'],
  4. ['C', 'D', '1'],
  5. ['C', 'D', '1'],
  6. ['C', 'D', '1'],
  7. ['D', 'E', '1'],
  8. ['D', 'E', '1']], dtype='<U11')
展开查看全部

相关问题