2014-01-21 2 views
1

인라인 균일 한 분포 초기화를 시도하고 있지만 가능하면 그렇게하는 방법을 찾지 못하는 것 같습니다.in 루프 초기화를위한 매트릭스 (Jagged Array)

내 작업 코드는 다음과 같습니다

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