2017-04-11 144 views
1

我試圖隨機初始化向量列表(或1D數組)。矢量並不總是具有相同的長度。Python - 初始化隨機設置不同長度的向量

我重現我的問題的一個小例子:

import numpy 

l_vec = [5, 6, 4] 
n_vec = len(l_vec) 
w = numpy.array((n_vec,)).astype(object) 

for i in range(len(l_vec)): 
    w[i] = numpy.random.rand(l_vec[i]) 
    print i, w[i] 

如果你運行它,你會看到,w[0],有沒有問題:

0 [ 0.10584519 0.90833169 0.94235319 0.34320398 0.71796362] 

不過,我有這個誤差爲下一個(當i=1):

IndexError: index 1 is out of bounds for axis 0 with size 1 

如何更正我的代碼以便能夠隨機初始化我的一組(不同長度)的向量?

如果你可以告訴我這段代碼有什麼問題,我也會很感激。

+0

因爲'w'的長度爲1.另外,如果你打算使用'object'風格,你可能會使用普通列表而不是numpy數組。 –

+0

再看看[numpy.array'的文檔字符串](https://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html)。第一個參數不是數組的大小。 –

+1

'w = numpy.zeros(n_vec,dtype = object)'是生成大小爲(n_vec,)的對象dtype數組的正確方法。 – hpaulj

回答

0

w=np.array(...)替換爲w=np.empty(...)

import numpy 

l_vec = [5, 6, 4] 
n_vec = len(l_vec) 
w = numpy.empty((n_vec,)).astype(object) 

for i in range(len(l_vec)): 
    w[i] = numpy.random.rand(l_vec[i]) 
    print(i, w[i]) 

看看的np.arraynp.empty的文檔。

+0

非常感謝。我會看看文檔,因爲我從來沒有見過'np.empty()' – Nuageux