Не в состоянии изменить массив NumPy в Python - PullRequest
0 голосов
/ 16 декабря 2018

Я новичок в питоне.Я пытаюсь изменить массив NumPy, но почему-то он не получает изменить.Вот моя программа

def test_numpy(x):
    count = 0
    for i in x:
        i-=np.max(i)
        i=(np.exp(i)/np.sum(np.exp(i)))
        print "The value of i is "
        print i
        x[count] = i
        count+=1
        print "the value of x is "
        print x

if __name__ == "__main__":
    test_numpy(np.array([[1,2],[3,4]])). 

Выходные данные, которые она печатает:

Значение i равно [0.26894142 0.73105858], значение x равно [[0 0] [3 4]].значение i равно [0.26894142 0.73105858] значение x равно [[0 0] [0 0]]

Я предполагаю, что значение x должно быть переопределено значением i.Таким образом, после повторения в два раза значение x должно стать ([0.26894142 0.73105858], [0.26894142 0.73105858]) Но каким-то образом значение не переопределяется.Может ли кто-нибудь указать на мою ошибку здесь

Ответы [ 2 ]

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

Ваш входной массив имеет тип int, поэтому невозможно сохранить числа с плавающей запятой.Вы должны предоставить массив с плавающей точкой:

q=np.array([[1,2],[3,4]], dtype=float)
test_numpy(q)
print q

или вы не изменяете массив, а создаете новый, тогда результирующий тип автоматически выбирается правильно:

def test_numpy(x):
    x = np.exp(x - x.max(axis=1)[:, None])
    return x / x.sum(axis=1)[:, None]

q = np.array([[1,2],[3,4]])
a = test_numpy(q)
print(a)
0 голосов
/ 16 декабря 2018

Когда вы делаете:

i=(np.exp(i)/np.sum(np.exp(i)))

Вы создаете новую переменную, вы не меняете данные на месте.Вы забыли сказать Python изменить данные:

i[:]=(np.exp(i)/np.sum(np.exp(i)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...