2014-10-01 28 views
2

什麼是更加Pythonic的做法?np.arange後面是整形

min_odds = np.arange(1.05, 2.0, 0.01) 
min_odds = min_odds.reshape(len(min_ods), -1) 

該代碼創建一個形狀(95,)的ndarray並將其轉換爲形狀(95,1)。

另外,爲什麼numpy有時創建一個空白最後維度的大小爲(95,)的數組?

+1

'(95,)'是1d數組的形狀(想'矢量')。 '(95,1)'是二維數組的形狀。 '(1,95)'是另一種2D形狀。 'arange'創建一個1d。 – hpaulj 2014-10-01 05:36:38

回答

3

你可以用np.newaxis切片(這是None只是一個花哨的別名),如果你想:

>>> np.arange(1.05, 2.0, 0.01)[:,np.newaxis].shape 
(95, 1) 

如果你喜歡你有什麼,我會擺脫-1和只需使用1(除非您希望用戶必須查找-1應該表示的意思,就像我剛纔所做的那樣)。

>>> arr = np.arange(1.05, 2.0, 0.01) 
>>> arr = arr.reshape(len(arr), 1) 
>>> arr.shape 
(95, 1) 

關於你的第二個問題,

「爲什麼numpy的,有時一個空白的最後一個維度創建一個大小爲(95)的陣列?」

我不是100%確定我明白你在問什麼。 ndarray.shape a tuple。具有單個元素的字符串表示的元組看起來像(something,)

此外,請注意以下有關在此情況下優先選擇np.linspacenp.arange的註釋。

+1

Nah,不涉及拷貝,只是查看同一個數組。另外,你不應該用浮點參數來起訴'np.arange',因爲它經常因四捨五入錯誤而反彈,並且給你一個額外的參數。在這種情況下,'np.linspace(1.05,1.99,95)[:,None]'將是首選。 – Jaime 2014-10-01 05:30:00

+2

@Jaime - 關於'np.linspace'的好處...我沒有考慮代碼的那部分:-)。 – mgilson 2014-10-01 05:31:09

4

我經常跟着arangereshape生成測試數組,例如,

np.arange(12).reshape(3,4) 

使用-1避免服用len(),例如

np.arange(10).reshape(-1,1).shape # (10, 1) 

arange總是返回1d數組。 numpy數組可以有任意數量的維度,包括0.形狀表示爲一個元組。 (10,)只是一個元組元組。 (需要將其與(10)區分開來)。