Как перенести 2-D массив в 1-D массив? - PullRequest
0 голосов
/ 04 января 2019

У меня есть двумерный массив NumPy arr:

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

Я хочу преобразовать его в 1-D вектор:

vec = [1, 0, 0, 2, 0, 0]

Значения 0, 1 и 2 должны соответствовать столбцу art, в котором значение равно 1.

Есть ли какой-нибудь не-цикл способ сделать это?

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Вы можете использовать матричную математику для решения этой проблемы, потому что у вас есть только одно ненулевое значение на строку. Простое скалярное произведение с вектором «позиция» даст вам желаемый результат. Вы хотите эмулировать матричное уравнение A * x = y, и до тех пор, пока x является вектором столбца, вы получите вектор-столбец в качестве ответа.

>>> import numpy as np
>>> a = np.array([[0., 1., 0.],
...               [1., 0., 0.],
...               [1., 0., 0.],
...               [0., 0., 1.],
...               [1., 0., 0.],
...               [1., 0., 0.]])
>>> x = (0,1,2)
>>> y = np.dot(a,x)
>>> y
array([1., 0., 0., 2., 0., 0.])

Используя этот метод, вы можете изменить вектор «положения» на любой, какой захотите, и он будет соответствующим образом «индексироваться» (я поместил это в кавычки, так как это математический прием). Например:

>>> x = (2,4,8)
>>> np.dot(a,x)
array([4., 2., 2., 8., 2., 2.])
0 голосов
/ 04 января 2019
>>> a.nonzero()[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

Для более гибких условий

>>> np.nonzero(a==1)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

>>> np.where(a==1)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)

>>> np.where(a>0)[1]
array([1, 0, 0, 2, 0, 0], dtype=int64)
0 голосов
/ 04 января 2019

Попробуйте NumPy. ненулевой :

>>> import numpy as np
>>> a = np.array([[0., 1., 0.],
...               [1., 0., 0.],
...               [1., 0., 0.],
...               [0., 0., 1.],
...               [1., 0., 0.],
...               [1., 0., 0.]])
>>> np.nonzero(a)[1]
array([1, 0, 0, 2, 0, 0])

или numpy. где :

>>> np.where(a)[1]
array([1, 0, 0, 2, 0, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...