Diviziunea element-înțeleaptă a matricei Numpy (1/x) (Programare, Python, Numpy, Divizia)

Roophie a intrebat.

Întrebarea mea este foarte simplă, să presupunem că am un array de tipul

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

și aș vrea să obțin un array de genul

[1, 0.5, 0.3333333, 0.25]

Cu toate acestea, dacă scriu ceva de genul

1/array

sau

np.divide(1.0, array)

nu va funcționa.

Singura modalitate pe care am găsit-o până acum este să scriu ceva de genul:

print np.divide(np.ones_like(array)*1.0, array)

Dar sunt absolut sigur că există o modalitate mai bună de a face acest lucru. Are cineva vreo idee?

3 răspunsuri
eumiro

1 / array face o împărțire de numere întregi și returnează array([1, 0, 0, 0]).

1. / array va transforma matricea în float și va rezolva problema:

>>> array = np.array([1, 2, 3, 4])
>>> 1. / array
array([ 1.        ,  0.5       ,  0.33333333,  0.25      ])

Comentarii

  • Ca o paranteză, dacă puneți from __future__ import division la începutul codului dumneavoastră, acesta va efectua întotdeauna împărțiri reale cu numere întregi. Acesta este comportamentul implicit în Python 3, deoarece este răspunsul pe care majoritatea oamenilor îl așteaptă. Puteți obține în continuare diviziunea cu numere întregi folosind opțiunea // operator. –  > Por DaveP.
mgilson

Am încercat :

inverse=1./array

și se pare că a funcționat…Motivul

1/array

nu funcționează este pentru că array-ul tău este format din numere întregi și 1/<array_of_integers> face diviziuni întregi.

rowel

Alte modalități posibile de a obține reciproca fiecărui element al unui tablou de numere întregi:

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

Folosind reciproca lui numpy:

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

Cast:

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