2017-11-18 2 views

답변

1

당신은 사용할 수 있습니다 :

xlist,ylist = np.fromiter(
     itertools.chain.from_iterable(f(value) for value in x), 
     dtype=np.int_, 
     count=len(x)*2 
    ).reshape((-1,2)).T 

또는

xlist,ylist = np.array([f(value) for value in x]).T 

그러나 다른 답변에서 제안한 것처럼 어레이에서 직접 작업하는 방식은보다 읽기 쉽고 빠를 수도 있습니다.

+0

왜 첫 번째 솔루션이 두 배 빠른 속도입니까? – Peterhack

+0

@Peterhack 확신하기 만하면 내가 제안한 다른 솔루션보다 더 빠르다는 의미입니까? 아마도 중간 목록을 만들지 않기 때문에 출력 배열은'count' 인수를 사용하여 미리 할당되고 생성기의 값을 사용하여 직접 채워집니다 (첫 번째 해결 방법에는 목록 이해가 없지만 생성자 표현식). – lukas

2

이렇게하려면 numpy.array을 사용하여 간단히 인수를 배열 자체로 전달하십시오. 기능의 조작은 배열 인수에 매핑 얻을 두 개의 배열의 튜플이 반환됩니다

>>> xlist, ylist = f(np.asarray(x)) 
>>> xlist 
array([2, 4, 6]) 
>>> ylist 
array([1, 4, 9]) 
+0

나는 그것을 알고있다. 그러나 이것은 단지 기본적인 예보다 더 광석이었다. 그래서 나는 아직도 그런 해결책에 관심이있다. 예 : 마지막 결과를 다음 반복의 입력으로 원하면 어떻게 될까요? 같은 NP로서 '수입 NumPy와 np.arange X = (10, 14) Y = [] t = 0 J, 난에 열거 (X)의 t = I + y.append (t) ' – Peterhack

+0

@ Peterhack, 그럼 당신은 잘못된 질문을했습니다. –

+0

그래서 나는 그것을 요구하지 않았다. 함수가 배열을 처리 할 수 ​​있는지 여부와 관계없이이 작동 방식을보고 싶었습니다. 그 일을 분명히하지 않으면 죄송합니다. – Peterhack

1

zip 또는 목록 함축에 대한 필요가 없습니다. 당신은 또한 당신의 f 기능을 변경할 필요가 없습니다 : x가 배열

>>> import numpy as np 
>>> x = np.arange(1, 4) 
>>> array1, array2 = f(x) 
>>> array1 
array([2, 4, 6]) 
>>> array2 
array([1, 4, 9]) 

경우를 2 * xx의 각 요소는 2 곱한된다는 것을 의미합니다 :

>>> 2 * x 
array([2, 4, 6]) 
+0

배열을 처리 할 수없는 함수 사이에 무언가가 있다고 가정하면리스트의 이해가 가능할 것입니다. 맞습니까? 그래서 내가 그 일을 급히 찾고 있었다. – Peterhack

관련 문제