2017-04-05 52 views
1

我在Python中創建了一個N numpy數組的列表,其中每個數組的大小都是P。當我撥打numpy.shape(my_list)時,我找回了元組(N, D, P)。當我追加到我的列表中的數組大小不一樣(或者如果我追加不是數組的項目),numpy.shape將引發錯誤。使用numpy數組的列表形狀

  1. 如果我想要列表中的每個數組的形狀,我必須求助於列表理解還是有更快的方法來做到這一點?
  2. numpy是否簡單地遍歷列表,檢查以確保每個元素是一個大小與前一個相同的數組,並根據是否返回元組或者拋出錯誤來決定?
+0

1)是,2)可能是 –

+0

列表不是一個numpy數據類型。沒有「無規律」的迭代方式,所以列表理解是唯一的選擇。當你調用'numpy.shape(my_list)'時,隱式創建一個數組數組。爲使此操作成功,列表中的所有數組必須具有相同的形狀。 – DyZ

+0

請注意'my_list.shape'會給你一個錯誤。這是試圖將列表轉換爲數組的函數形式。 – hpaulj

回答

1

如果我想在列表中的每個陣列的形狀,我必須訴諸列出的理解還是有更快的方法來做到這一點?

列表理解。

是否numpy只是遍歷列表,檢查以確保每個元素是一個大小與前一個相同的數組,並根據是否返回一個元組或者拋出一個錯誤來決定?

NumPy calls asarray on the list,建立一個完整的數組只是爲了獲得形狀。 (這不是任何人都想優化的東西。)

+0

'map(np.shape,list_of_arrays)'比列表理解更快嗎? – kmario23

+0

@ kmario23:它的運行速度可能微不足道,但兩種方式在運行時都非常接近,並且這兩種方式都不會使此操作成爲性能瓶頸。同樣,直接訪問'shape'屬性會比使用'np.shape'更快,並且你不能用'map'來完成。 (直接訪問shape屬性應該是'[arr.shape for my_list中的arr]')。 – user2357112

+0

是的。發現運行一些測試後。順便說一句,我提供了一個自定義的python函數到'map',它利用'arr.shape',發現它比列表理解慢2倍。但是,如果只需要一個可迭代的而不是整個列表本身,那麼'map'就是要走的路。 – kmario23