2015-07-21 49 views
2

我使用Python 2.7.5 numpy的形狀輸出出於某種原因,蟒蛇,當我在if語句中使用我的numpy的陣列的尺寸之一,具有比較不喜歡它:在Windows 7上使用邏輯

a = np.array([1,2,3,4]) 
# reshapes so that array has two dimensions 
if len(np.shape(a)) == 1: 
    a = np.reshape(a, (1, np.shape(a))) 

b = np.shape(a)[0] 

if b <= 3: 
    print 'ok' 

我創建了一維numpy數組(實際上'a'是可能是1D或2D的輸入)。然後我重塑這個形成一個2D numpy數組。我嘗試使用新創建的尺寸作爲比較器,我得到一個錯誤:「TypeError:一個整數是必需的」

我也試過「int(b)」將長整數轉換爲一個純整數在if語句中,它給出了相同的錯誤。如果我輸入「(b)」,它會給我「輸入」long「。我覺得我以前做過這個沒有任何問題,但我找不到任何例子。它是如何將一維數組更改爲二維數組的?任何幫助表示讚賞。

+2

這行會拋出錯誤? – csunday95

+2

'np.shape(a)'將會是一個元組,所以當你做'(1,np.shape(a))'' – Ajean

+0

時,你最終會得到一個元組中的元組'。第二個if語句會拋出錯誤「if b <= 3:」,但下面的海報是正確的,錯誤實際上是我如何重塑a的。 – Eric

回答

1

問題的行是a = np.reshape(a, (1, np.shape(a)))

的軸增加的a前我建議使用:

a = a[np.newaxis, ...] 

print a.shape # (1, 4) 

None做同樣的事情爲np.newaxis

+0

這一個作品,以及下面給出的答案...感謝tom10和Padraic坎寧安! – Eric

3

你正在用np.shape創建一個元組,所以你傳遞的是(1,(4,))所以這個錯誤跟你的if沒什麼關係,這是if裏面發生了什麼,你需要使用np.shape(a)[0]但我不完全確定你正在嘗試做T:

np.shape(a)[0] 

或者乾脆a.shape[0]

0

看起來你正在試圖做同樣的事情np.atleast_2d

def atleast_2d(*arys): # *arys handles multiple arrays 
    res = [] 
    for ary in arys: 
     ary = asanyarray(ary) 
     if len(ary.shape) == 0 : 
      result = ary.reshape(1, 1) 
     elif len(ary.shape) == 1 : # looks like your code! 
      result = ary[newaxis,:] 
     else : 
      result = ary 
     res.append(result) 
    if len(res) == 1: 
     return res[0] 
    else: 
     return res 

In [955]: a=np.array([1,2,3,4]) 
In [956]: np.atleast_2d(a) 
Out[956]: array([[1, 2, 3, 4]]) 

,或者它是一個列表:

In [961]: np.atleast_2d([1,2,3,4]) 
Out[961]: array([[1, 2, 3, 4]]) 

您還可以測試ndim屬性:a.ndim==1