Создание нового массива Numpy с индексами другого массива Numpy - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть массив 10 x N следующим образом:

[[ 0.  1.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  1.  0.  0.]
 [ 1.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  1.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  1.]
 [ 0.  0.  0. ...,  0.  0.  1.]]

Я хочу массив Numpy следующего формата 1 x N, где каждый элемент в новом массиве - это значение индекса, заполненного'1' в массиве 10 x N.

Например, процесс преобразует вышеприведенное в массив:

[[ 1.  7.  0. ...,  7,  9.  9.]]

У меня был некоторый успех с использованием функции:

np.where(array > 0)[0][0]

Это дает мне значение для моего окончательного массива, но мои попытки заполнить массив в требуемом формате не сработали.Кроме того, мои реализации не были очень питонными.Есть ли питоническое решение вышеуказанного вопроса?

1 Ответ

0 голосов
/ 07 декабря 2018

Настройка

a = np.array([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
              [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
              [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 1, 0, 0, 0]])

Вам важен только столбец , поскольку ваш второй массив является 1D, прямо сейчасвы захватываете строку из numpy.where

Если вы можете гарантировать, что в строке есть только один 1, просто возьмите столбцы из вывода numpy.where:

np.where(a==1)[1]

array([5, 0, 2, 4, 2, 6], dtype=int64)
...