2017-01-02 115 views
0

我正在使用一個數據對象,它是不同形狀的numpy數組列表。我想對待數據對象作爲一個單一的numpy的對象,這樣我可以加,減,它們好像是純粹的numpy的陣列擴展這些對象:將numpy數組的列表視爲一個numpy對象

# Defining the data objects: 
d1 = [numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)] 
d2 = [numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)] 

# The operation I want to perform: 
d3 = [a1 + 2*a2 for a1, a2 in zip(d1, d2)] 

# What I really would like to write: 
d3 = d1 + 2*d2 # (not valid for lists of arrays) 

什麼是定義的對象D1的最簡單方法和d2這樣我可以使用最後一行?

我問的原因是因爲我想重用一些假設d1和d2是簡單numpy數組的可以添加和縮放的代碼。

+0

@Moses Koledoye:數組的形狀比賽。看例子。 –

+0

從這些列表創建數組時,請注意'shape'和'dtype'。由於子陣列的形狀不同,組合將是數組對象的一維數組,而不是浮點數的多維數組。一些但不是全部的numpy數學通過這些對象傳播。 – hpaulj

回答

1

簡單地定義他們爲numpy.array作品:

d1 = numpy.array([numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)]) 
d2 = numpy.array([numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)]) 
d3 = d1 + 2 * d2 

或者,如果你想保持d1d2作爲常規列表,你可以使用numpy.asarray

d1_ = numpy.asarray(d1) 
d2_ = numpy.asarray(d2) 
d3 = d1_ + 2 * d2_ 
+0

「asarray」有什麼不同? – hpaulj

+0

@hpaulj什麼都沒有。我只是想將它作爲一個選項,如果一個已經存在的列表存儲在某個地方,並且不想更改定義行 – glS