2014-01-21 24 views
1

我試圖做一個內聯均勻分佈初始化,但似乎並沒有找到如何這樣做,如果可能的話。矩陣(Jagged數組)在循環初始化

我的工作代碼爲:

test = [[1,2,3],[4,5,6],[7,8,9]] 
p = [] 
for row in test: 
    prow = [1.0/(len(row)*len(test)) for x in row] 
    p.append(prow) 
print p 
[[0.1111111111111111, 0.1111111111111111, 0.1111111111111111], 
[0.1111111111111111, 0.1111111111111111, 0.1111111111111111], 
[0.1111111111111111, 0.1111111111111111, 0.1111111111111111]] 

我的問題是,有沒有辦法縮小「在測試行」的第二環的相同的形式和只有1行結束了?例如:

p = [1.0/(len(row)*len(test)) for x in row for row in test] 
print p 
[0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111, 
0.1111111111111111] 

但顯然是正確的結果。線索?

+0

你們是快!謝謝!現在還不能接受答案。 – mimoralea

回答

3

呀,你要找的東西是這樣的:

In [13]: test = [[1,2,3],[4,5,6],[7,8,9]] 

In [14]: p = [[1.0/(len(row)*len(test)) for x in row] for row in test] 

In [15]: p 
Out[15]: 
[[0.1111111111111111, 0.1111111111111111, 0.1111111111111111], 
[0.1111111111111111, 0.1111111111111111, 0.1111111111111111], 
[0.1111111111111111, 0.1111111111111111, 0.1111111111111111]] 

PS:您可能會感興趣list comprehension syntax

4

我覺得是這樣的:

[[1.0/(len(row)*len(test))]*len(row) for row in test] 

如果我正確地閱讀你的代碼。這裏的魔力是因爲行中的每個元素都獲得相同(不可變)的值,您可以使用正確的值ala [value]*length創建正確長度的列表。

+0

真的是魔術。甚至沒有想過這種方法。 – mimoralea