2011-05-02 4 views
0
  • 입력 데이터는 1 차원 numpy 배열 목록입니다. x[0] = [ array([1.0,1.0,1.0]), array([2.0,2.0,2.0]), ...]
  • len(x)은 수천 (행)이며, len(x[n])은 고정 된 수 (열)이지만 실행마다 바뀔 수 있습니다 (따라서 여러 열을 하드 코딩하지 않으려합니다).
  • 기능 f(x[n][col])
  • 원하는 결과가

이 목록 플로팅위한 변환 열의 목록 단일 번호로 각각 array 변환, 그래서 그들은 NumPy와 데이터 구조 일 수있다.numpy의 데이터 변환

import numpy 

# create test data set 
def datagen(number): 
    return numpy.array([number,number,number]) 

x=[] 
for rows in range(20): 
    dataline = [ datagen(n) for n in range(5)] 
    x.append(dataline) 

#define transformation of array to single number 
def f(in_array): 
    return in_array.sum() 

NumPy와, 방법의 파이썬 정렬 얻을 result-- 원하는 :이 경우 각 배열 (20)을 갖는다

[ array([0,0,0,...0]), array([3,3,3,....,3]), array([6,6,6,...,6]), ..etc] 

여기서 테스트 데이터 및 명목 변환을 설정하는 일부 코드 요소 (각 데이터 행마다 하나씩)와 목록에 5 개의 배열 (각 열에 하나씩)이 있습니다.

여기에 내 현재의 솔루션입니다 :

trans = [] 
for dataline in x: 
    trans.append([f(a) for a in dataline]) 

trans = numpy.array(trans) 
answer = [ trans[:,col] for col in range(len(x[0])) ] 

너무 초라한하지만 내 머리가 아파와 난이 더 잘 할 수있는 느낌이 듭니다. ???

실생활에서 f (a) = numpy.sqrt(numpy.vdot(a,a)).

+0

무엇 '과 같이 f'는 무엇입니까? 함수를 vectorise하려면, 함수가 무엇을하는지 알아야합니다. –

+0

안녕하세요, Sven, 벡터의 크기 (편집 된 게시물)입니다. – Pete

+1

정말 numpy 배열 목록을 사용해야합니까? 3D 배열을 사용하기 시작했다면이 코드는 한 줄짜리 코드 일 것입니다. ('ndarray.sum'은 단일 축을 따라 쉽게 작동 할 수 있습니다.) –

답변

1

에 대해 어떻게 :

numpy.tile(numpy.arange(1,12).reshape(11,1),20) 
+0

pythonic보다 더 numpy/matlab-ish 일 것 같습니다. – YXD

+0

'x'와'f()'의 표현을 바꿀 수 있습니까? – Pete

+0

아, 이제 질문의 시작 부분을 올바르게 읽었습니다. 나쁘지 만, 나는 원하는 결과로 짧게 자르고 입력을 무시했다. 루프를 피하려면 http://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html 함수를 벡터화하고 싶지만 지금은 테스트 할 시간이 없습니다. 아웃... – YXD

관련 문제