代码之家  ›  专栏  ›  技术社区  ›  Dmitry Volkov

在numpy中提取和转换数据

  •  6
  • Dmitry Volkov  · 技术社区  · 8 年前

    [[1, 3., 'John Doe', 'male', 'doc', '25'],
      ...,
     [9, 6., 'Jane Doe', 'female', 'p', '28']]
    

    我需要提取与我的任务相关的数据。

    作为numpy和python的新手,我通常会以以下方式进行操作:

    data = np.array(
    [[1, 3., 'John Doe', 'male', 'doc', 25],
     [9, 6., 'Jane Doe', 'female', 'p', 28]]
    )
    
    data_tr = np.zeros((data.shape[0], 3))
    for i in range(0, data.shape[0]):
        data_tr[i][0] = data[i, 1]
        data_tr[i][1] = 0 if data[i, 3] == 'male' else 1
        data_tr[i][2] = data[i, 5]
    

    因此,我有以下几点:

    [[  3.,   0.,  25.],
     [  6.,   1.,  28.]]
    


    1 回复  |  直到 8 年前
        1
  •  5
  •   Divakar    8 年前

    一种方法 column-indexing

    data_tr = np.zeros((data.shape[0], 3))
    data_tr[:,[0,2]] = data[:, [1,5]]
    data_tr[:,1] = data[:,3]=='male'
    

    请注意,该步骤: data_tr[:,[0,2]] = data[:, [1,5]] 正在处理各个列的副本。这些对于赋值和提取来说不是很有效。因此,您可能希望分两个单独的步骤来实现这一点,主要是为了提高性能,就像这样-

    data_tr[:,0] = data[:, 1]
    data_tr[:,2] = data[:, 5]