2012-04-30 33 views
6

Câu hỏi của tôi rất đơn giản, giả sử rằng tôi có một mảng nhưBắt nghịch đảo (1/x) các yếu tố của một mảng NumPy

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

và tôi muốn để có được một mảng như

[1, 0.5, 0.3333333, 0.25] 

Tuy nhiên, nếu bạn viết một cái gì đó giống như

1/array 

hoặc

np.divide(1.0, array) 

nó sẽ không hoạt động.

Cách duy nhất tôi đã tìm thấy cho đến nay là viết một cái gì đó như:

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

Nhưng tôi hoàn toàn certains rằng có một cách tốt hơn để làm điều đó. Có ai có ý kiến ​​gì không?

Trả lời

7

1/array tạo bộ phận số nguyên và trả về array([1, 0, 0, 0]).

1./array sẽ bỏ mảng nổi và làm các trick:

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

Là một sang một bên, nếu bạn đặt 'từ __future__ bộ phận nhập' vào đầu mã của bạn, thì nó sẽ luôn thực hiện phân chia thực với số nguyên S. Đây là hành vi mặc định trong Python 3, vì đó là câu trả lời mà hầu hết mọi người mong đợi. Bạn vẫn có thể lấy phân số nguyên bằng toán tử '//'. – DaveP

1

tôi đã cố gắng:

inverse=1./array 

và đó dường như làm việc ... Lý do

1/array 

không hoạt động vì mảng của bạn là số nguyên và 1/<array_of_integers> không phân chia số nguyên.

1

cách có thể khác để có được những đối ứng của mỗi phần tử của một mảng các số nguyên:

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

Sử dụng NumPy của đối ứng:

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

Cast:

inv = 1/(array.astype(np.float32)) 
Các vấn đề liên quan