2013-02-01 34 views
13

thể trùng lặp:
numpy: access an array by columnBắt chỉ cột đặc biệt trong mỗi hàng trong một mảng NumPy

Tôi có một mảng NumPy (NumPy được nhập khẩu như np)

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

Tôi có thể nhận được các giá trị của toàn bộ cột của hàng thứ 1 bởi gona [1] [:].

mảng ([4, 5, 6])

Nhưng nếu tôi cố gắng để có được tất cả các giá trị của một cột cụ thể của tất cả các hàng (nói tôi muốn giá trị của cột 1 trong mỗi hàng) Tôi sẽ thử gona [:] [1]. Nhưng kết quả tôi nhận được từ điều này cũng giống như trước đây.

Điều gì có thể là lý do cho điều này? Làm thế nào để tôi làm một điều như vậy trong numpy?

+1

không. Tôi muốn biết tại sao cả hai cách đều cho kết quả tương tự quá – maheshakya

Trả lời

28

Bạn thực sự muốn làm điều này:

>>> a 
array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 
>>> a[:,1] 
array([ 2, 5, 8, 11]) 

a[:] chỉ trả về toàn bộ mảng, như vậy thì a[:][1] được trả lại hàng thứ hai của a. Tôi nghĩ đó là nơi sự nhầm lẫn của bạn nảy sinh.

Xem this phần của Tentative Numpy Tutorial để biết thêm thông tin về lập chỉ mục mảng đa chiều.

+2

'a [:] [1]' chọn hàng thứ hai –

+0

Rất tiếc. Bạn đúng. Tôi đã sửa chữa điều đó. –

+1

Điều này đã thực hiện công việc. Cảm ơn bạn – maheshakya

-1

Như thế này:

gona = numpy.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

# List comprehension, just get each element in 'gona', and then get first element in that list 
out = [x[0] for x in gona] 

print out 

Output:

>>> 
[1, 4, 7, 10] 
>>> 
6

Dường như có sự nhầm lẫn nhỏ về vị trí của dấu ngoặc, gona[:][1] trước tiên chọn mọi thứ từ mảng và từ mảng đó rồi chọn hàng thứ hai. Để chọn cột cụ thể bạn đưa các chỉ số trong dấu ngoặc vuông cùng nhau bằng dấu phẩy:

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

gona[1,:] 
Out[21]: array([4, 5, 6]) 

gona[:,1] 
Out[22]: array([ 2, 5, 8, 11]) 

gona[:,0] 
Out[23]: array([ 1, 4, 7, 10]) 

bạn cũng có thể chỉ cần chọn một loạt các hàng ví dụ

gona[0:2,0] # only take the two first rows of the first column 
Out[24]: array([2, 5]) 
+0

cảm ơn bạn đã chọn riêng một dải mã hàng :) – tieorange

Các vấn đề liên quan