2016-09-21 28 views
14

Tôi biết rằng mảng numpy có một phương thức được gọi là hình dạng trả về [No.of rows, No.of columns] và shape [0] cung cấp cho bạn số hàng, hình dạng [1] cho bạn số cột.Số hàng trong mảng numpy

a = numpy.array([[1,2,3,4], [2,3,4,5]]) 
a.shape 
>> [2,4] 
a.shape[0] 
>> 2 
a.shape[1] 
>> 4 

Tuy nhiên, nếu mảng của tôi chỉ có một hàng thì nó trả về [No.of columns,]. Và hình dạng [1] sẽ nằm ngoài chỉ mục. Ví dụ:

a = numpy.array([1,2,3,4]) 
a.shape 
>> [4,] 
a.shape[0] 
>> 4 //this is the number of column 
a.shape[1] 
>> Error out of index 

Bây giờ, làm cách nào để nhận được số hàng của mảng có nhiều mảng nếu mảng chỉ có một hàng?

Cảm ơn bạn

Trả lời

25

Khái niệm về hàngcột áp dụng khi bạn có một mảng 2D. Tuy nhiên, mảng numpy.array([1,2,3,4]) là mảng 1D và do đó chỉ có một thứ nguyên, do đó, shape trả về đúng một giá trị có thể lặp lại.

Đối với một phiên bản 2D của mảng cùng, hãy xem xét những điều sau đây thay vì:

>>> a = numpy.array([[1,2,3,4]]) # notice the extra square braces 
>>> a.shape 
(1, 4) 
+0

Tiết kiệm cuộc sống của tôi! Cảm ơn bạn rất nhiều –

+0

@YichuanWang Và nếu bạn bắt đầu với một mảng 1-d ('a_1d = numpy.array ([1,2,3,4])'), bạn luôn có thể biến đổi nó thành một mảng 2-d với ví dụ: 'a_2d = a_1d [Không,,]' – donkopotamus

2

Thay sau đó chuyển đổi này cho một mảng 2d, mà có thể không là một lựa chọn mỗi lần - một trong hai có thể kiểm tra len() của các tuple trả về bởi hình dạng hoặc chỉ kiểm tra một lỗi chỉ số như vậy:

import numpy 

a = numpy.array([1,2,3,4]) 
print(a.shape) 
# (4,) 
print(a.shape[0]) 
try: 
    print(a.shape[1]) 
except IndexError: 
    print("only 1 column") 

hoặc bạn chỉ có thể cố gắng và gán này cho một biến để sử dụng sau (hoặc trả lại hoặc những gì có bạn) nếu bạn biết bạn sẽ chỉ có 1 hoặc 2 hình dạng kích thước:

try: 
    shape = (a.shape[0], a.shape[1]) 
except IndexError: 
    shape = (1, a.shape[0]) 

print(shape) 
+0

Cảm ơn bạn. kể từ khi tôi mới đến python, tôi thậm chí không nghĩ đến việc sử dụng cách "thử ngoại trừ" này. Câu trả lời của bạn là mở mắt! –