2016-09-21 54 views
14

我知道numpy數組有一個稱爲shape的方法,它返回[行號,列數],形狀[0]爲您提供行數,形狀[1]給出你的列數。numpy數組中的行數

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

但是,如果我的數組只有一行,那麼它返回[Number of columns,]。形狀[1]將不在索引中。例如

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 

現在如何獲得numpy數組的行數,如果數組可能只有一行?

謝謝

回答

25

列的概念當你有一個二維數組適用。但是,數組numpy.array([1,2,3,4])是一維數組,因此只有一個維度,因此shape正確地返回單值可迭代。

對於相同陣列的2D版本,考慮代替以下:

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

拯救我的生命!非常感謝 –

+0

@YichuanWang如果你從一個一維數組開始('a_1d = numpy.array([1,2,3,4])'),你總是可以把它轉換成一個二維數組例如'a_2d = a_1d [無,:]' – donkopotamus

2

相反然後轉換此爲2D陣列,這可能不是一個選項每當 - 一個既可以檢查的len()通過形狀返回的元組或只是檢查索引錯誤這樣:

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") 

或者你可以嘗試,並指定這個以供將來使用一個變量(或退貨或者你有什麼)如果你知道你將只有1或2維的形狀:

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

print(shape) 
+0

謝謝。由於我是python的新手,我甚至沒有想過使用這種「嘗試除外」的方式。你的回答讓人大開眼界! –