3
새로운 배열을 만들기 위해 하위 배열의 n 개의 복사본을 스택하는 데 더 효율적인 방법 (또는 적어도 pythonic)이 있습니까?파이썬에서 n 개의 하위 배열 배열을 만듭니다.
import numpy as np
x = np.arange(4)
for i in range(n-1):
x = hstack((x,arange(4)))
감사합니다,
새로운 배열을 만들기 위해 하위 배열의 n 개의 복사본을 스택하는 데 더 효율적인 방법 (또는 적어도 pythonic)이 있습니까?파이썬에서 n 개의 하위 배열 배열을 만듭니다.
import numpy as np
x = np.arange(4)
for i in range(n-1):
x = hstack((x,arange(4)))
감사합니다,
In [34]: x = np.arange(4)
In [35]: np.tile(x,(3,1))
Out[35]:
array([[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3]])
하지만 조심해야 해 - 당신은 반복해서 같은 행을 복제하는 대신 broadcasting를 사용할 수 있습니다. 예를 들어
, 당신은 모양의 일부 배열 (3,4)가 있다고 가정 : 여기
In [40]: y = np.arange(12).reshape(3,4)
In [41]: y
Out[41]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
과 당신의 x
:
In [42]: x = np.arange(4)
In [43]: x
Out[43]: array([0, 1, 2, 3])
당신은 추가 할 수 있습니다 x
(그 모양 (4,)
입니다) y
(모양은 (3,4)
)이고 NumPy는 자동으로 모양 (3,4)으로 x
을 "브로드 캐스트"합니다 :
(3210)는 당신이 볼 수 있듯이, tile
x
처음에 필요가 없습니다
In [45]: np.tile(x,(3,1)) + y
Out[45]:
array([[ 0, 2, 4, 6],
[ 4, 6, 8, 10],
[ 8, 10, 12, 14]])
와 결과를 비교. 사실 이 아니기 때문에 타일링 x
이 아니라면 메모리를 절약 할 수 있습니다.
고급 색인 생성 및'index_tricks' 모듈 인스턴스를 잊지 마십시오. 'x '가 평면 배열이라면'x [np.c _ [[range (x.size)] * n]]'는 타일링과 같은 효과를 갖습니다. (아마 직접 방송보다 더 많은 메모리를 사용하고있을지라도) – JAB
매우 간결합니다. np.tile()은 제가 찾고 있던 방송 솔루션이었습니다. – poeticcapybara