Вопрос по division, python, numpy – Поэлементное деление массива Numpy (1 / x)

6

Мой вопрос очень прост, предположим, что у меня есть массив как

<code>array = np.array([1, 2, 3, 4])
</code>

и я хотел бы получить массив как

<code>[1, 0.5, 0.3333333, 0.25]
</code>

Однако, если вы напишите что-то вроде

<code>1/array
</code>

или же

<code>np.divide(1.0, array)
</code>

это не сработает.

Единственный способ, который я нашел до сих пор, - написать что-то вроде:

<code>print np.divide(np.ones_like(array)*1.0, array)
</code>

Но я абсолютно уверен, что есть лучший способ сделать это. У кого-нибудь есть идеи?

Ваш Ответ

3   ответа
9

1 / array делает целочисленное деление и возвращаетarray([1, 0, 0, 0]).

1. / array приведем массив к float и сделаем трюк:

>>> array = np.array([1, 2, 3, 4])
>>> 1. / array
array([ 1.        ,  0.5       ,  0.33333333,  0.25      ])
В сторону, если вы положитеfrom __future__ import division в начале вашего кода он всегда будет выполнять реальное деление с целыми числами. Это поведение по умолчанию в Python 3, так как это ответ, которого ожидает большинство людей. Вы все еще можете получить целочисленное деление, используя// оператор.
1

Я старался :

inverse=1./array

и это, казалось, сработало ... Причина

1/array

не работает, потому что ваш массив целых чисел и1/<array_of_integers> делает целочисленное деление.

1

Другие возможные способы получить обратную величину каждого элемента массива целых чисел:

array = np.array([1, 2, 3, 4])

Используя взаимную обратную связь numpy:

inv = np.reciprocal(array.astype(np.float32))

В ролях:

inv = 1/(array.astype(np.float32))

Похожие вопросы