2012-09-03 2 views
0

[float, (float, float, float ..)] 목록이 있습니다. 기본적으로 각 차원의 적합도와 함께 n 차원 점입니다. 포인트. 예를 들어.int, 튜플 목록을 numpy 배열로 변환

4.3, (2,3,4) 
3.2, (1,3,5) 
. 
. 
48.2, (23,1,32) 

적합성 값을 기준으로 한 점을 무작위로 샘플링하고자합니다. 나는이 그러나, 나는 내가 np.asarray에 대해 동일한 오류 (가지고

>> pArr = np.array(plist) 
ValueError: setting an array element with a sequence 

을 시도하는 들어, NumPy와 배열로 변환해야 numpy.random.choice(range(n), 1, plist[:,:1,:1])

을 사용하는 것입니다 할 수있는 가장 좋은 방법을 결정 plist)뿐만 아니라 .. 어떤 제안 ??

+0

afaik np 배열은 같은 유형의 모든 요소 여야합니다 ... –

+0

3 차원 배열로 변환 할 수 있습니까? 또는이 목록 자체의 형성을 변경하여 3 차원으로 만들 수 있습니까? – Nicomoto

답변

1

다음 작업을해야합니다 :

A = np.array([tuple(i) for i in initial_list],dtype=[('fitness',float),('point',(float,3))]) 

initial_list = [[4.3, (2, 3, 4)], [3.2, (1, 3, 5)], ...]와 함께. 이 트릭이 작동하려면 initial_list의 각 항목을 튜플로 변환해야하며 그렇지 않으면 NumPy가 구조를 인식 할 수 없다는 점에 유의하십시오.

휘트니스 엔트리는 A['fitness']이며, 해당 점은 A['point']입니다. 실제 피트니스 항목 목록을 선택하면 indices, 해당하는 점은 A['point'][indices], 즉 (n,3) 배열로 표시됩니다.

+0

그건 고마워요 !! 그러나이 상황에서 정말로 도움이되지는 않습니다. 이후 무작위로 선택 적합성 값을 슬라이스하려고합니다. 어느 날 다차원 배열에서 한 차원을 슬라이싱하는 초기 문제로 돌아갑니다 ...! – Nicomoto

+1

@ Nicomoto, 편집 도움이됩니까? –

+0

괜찮은 것 같습니다 ... 정말 고마워요! – Nicomoto

1

귀하의 질문에 이해하기 어렵습니다. 이게 너가하려는거야?

>>> x 
[[4.3, (2, 3, 4)], [3.2, (1, 3, 5)], [48.2, (23, 1, 32)]] 
>>> np.array([(a, b, c, d) for a, (b, c, d) in x]) 
array([[ 4.3, 2. , 3. , 4. ], 
     [ 3.2, 1. , 3. , 5. ], 
     [ 48.2, 23. , 1. , 32. ]]) 
+0

글쎄, 적합성은 좌표와 다르고, 나는 그 방향으로 유지하고 싶습니다 ..하지만 나는 이것을 할 수 있고 1을 추가하여 좌표에 접근하고자하는 곳을 추가 할 수 있습니다! – Nicomoto

+0

유일한 문제는 내 크기가 가변적이라는 것입니다. 그래서 저는 튜플에 (b, c, d) 또는 (b, c, d, e ...)를 가질 수 있습니다, 이것은 일반화 될 수 있습니까? – Nicomoto

관련 문제