【问题标题】:Making Integer Vector into Binary Array with 1 at location of integer将整数向量制作成二进制数组,整数位置为 1
【发布时间】:2020-08-09 08:39:05
【问题描述】:

假设我有一个这样的整数数组:[0,1,2,0,0,1,3]。我怎样才能把它变成一个二进制数组,其非零条目由[0,1,2,0,0,1,3]定义,即:

array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [1., 0., 0., 0.],
       [1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 0., 1.]])

我目前正在使用以下代码:

dummy_indices = np.array([0,1,2,0,0,1,3])
dummy_array = np.zeros([dummy_indices.shape[0],(1+np.max(dummy_indices))])
for i in range(dummy_array.shape[0]):
    dummy_array[i,dummy_indices[i]] =1

有没有更快的无循环方法?

【问题讨论】:

    标签: python arrays numpy numpy-ndarray


    【解决方案1】:

    你可以这样做:

    x = np.array([0,1,2,0,0,1,3]) #your init array
    y = np.zeros(shape=(x.shape[0], x.max()+1))
    y[np.arange(x.shape[0]), x] = 1
    
    y
    array([[1., 0., 0., 0.],
           [0., 1., 0., 0.],
           [0., 0., 1., 0.],
           [1., 0., 0., 0.],
           [1., 0., 0., 0.],
           [0., 1., 0., 0.],
           [0., 0., 0., 1.]])
    
    

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 2013-09-09
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      相关资源
      最近更新 更多