заменяющий элемент массив np - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть этот nparray:

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

, и я хочу сделать что-то вроде этого:

for item in array :
        if item[0] == 1:
            item=[0.8,0.20,0,0,0]
        elif item[1] == 1:
            item=[0.20,0.80,0,0,0]
        elif item[3] == 1:
            item=[0,0,0,0.8,0.2]
        elif item[4] == 1:
            item=[0,0,0,0.2,0.8]
        else:
            [0,0,1,0,0]

Я пытаюсь это:

def conver_probs2(arg):
    test= arg
    test=np.where(test==[1.,0.,0.,0.,0.], [0.8,0.20,0.,0.,0.],test)
    return test

норезультат таков:

[[0.  0.2 0.  0.  1. ]
 [0.8 0.2 0.  0.  0. ]
 [0.  0.2 1.  0.  0. ]
 ...
 [0.  0.2 1.  0.  0. ]
 [0.  0.2 0.  0.  1. ]
 [0.8 0.2 0.  0.  0. ]]

не то, что я хочу ... есть идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Если ваш замещающий массив имеет ту же форму, что и ваша цель, вы можете сделать это:

mask = target[target[:, 0] == 1]
target[mask] = replacements[mask]

вот простой тест

test_target = np.eye(4)
test_target[2:, 0] = 1
replacements = np.ones((4, 4)) * 42

Перед использованием np.where попробуйте выполнить логическое индексированиепервый.Обычно это то, что вы хотите.

0 голосов
/ 01 февраля 2019

Простым подходом было бы перебирать индексы.

Тогда вы могли бы повторно использовать тот же цикл for, который вы показали так:

for i in range(len(array)):
  if array[i][0] == 1:
    array[i] = [0.8, 0.2, 0, 0, 0] 
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...