[PYTHON] Numpy - 벡터 행이있는 행렬 만들기
PYTHONNumpy - 벡터 행이있는 행렬 만들기
저는 벡터 [x, y, z, q]를 가지고 있고 행렬을 만들고 싶습니다 :
[[x,y,z,q],
[x,y,z,q],
[x,y,z,q],
...
[x,y,z,q]]
m 행. 나는 이것이 브로드 캐스팅을 사용하여 영리한 방법으로 수행 될 수 있다고 생각하지만, for 루프를 사용하여 생각할 수있다.
해결법
-
==============================
1.기둥을 따라 m 제로를 추가 한 후 방송 할 수 있습니다.
기둥을 따라 m 제로를 추가 한 후 방송 할 수 있습니다.
np.zeros((m,1),dtype=vector.dtype) + vector
이제 NumPy는 이미 동일한 작업을 위해 내장 함수 np.tile을 가지고 있습니다.
np.tile(vector,(m,1))
샘플 실행 -
In [496]: vector Out[496]: array([4, 5, 8, 2]) In [497]: m = 5 In [498]: np.zeros((m,1),dtype=vector.dtype) + vector Out[498]: array([[4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2]]) In [499]: np.tile(vector,(m,1)) Out[499]: array([[4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2]])
동일한 효과를 위해 np.newaxis / None을 사용하여 차원을 확장 한 후 np.repeat를 사용할 수도 있습니다.
In [510]: np.repeat(vector[None],m,axis=0) Out[510]: array([[4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2]])
정수 배열 인덱싱을 사용하여 복제본을 얻을 수도 있습니다 (예 :
In [525]: vector[None][np.zeros(m,dtype=int)] Out[525]: array([[4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2]])
그리고 마지막으로 np.broadcast_to를 사용하면 입력 벡터에 2D 뷰를 생성 할 수 있습니다. 따라서 가상 메모리가 필요 없으며 추가 메모리가 필요하지 않습니다. 그래서, 우리는 간단히 -
In [22]: np.broadcast_to(vector,(m,len(vector))) Out[22]: array([[4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2], [4, 5, 8, 2]])
런타임 테스트 -
다음은 다양한 접근 방식을 비교하는 빠른 런타임 테스트입니다.
In [12]: vector = np.random.rand(10000) In [13]: m = 10000 In [14]: %timeit np.broadcast_to(vector,(m,len(vector))) 100000 loops, best of 3: 3.4 µs per loop # virtually free! In [15]: %timeit np.zeros((m,1),dtype=vector.dtype) + vector 10 loops, best of 3: 95.1 ms per loop In [16]: %timeit np.tile(vector,(m,1)) 10 loops, best of 3: 89.7 ms per loop In [17]: %timeit np.repeat(vector[None],m,axis=0) 10 loops, best of 3: 86.2 ms per loop In [18]: %timeit vector[None][np.zeros(m,dtype=int)] 10 loops, best of 3: 89.8 ms per loop
from https://stackoverflow.com/questions/33200625/numpy-create-matrix-with-rows-of-vector by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 : 파이썬 객체를 호출하는 동안 최대 재귀 깊이를 초과했습니다. (0) | 2018.11.06 |
---|---|
[PYTHON] 우분투에서 python3.4를 python3.6으로 업그레이드하면 pip가 나옵니다. (0) | 2018.11.06 |
[PYTHON] 파이썬에서 "#ifdef"를 어떻게 구현합니까? (0) | 2018.11.06 |
[PYTHON] 업데이트를 수행 할 때 명시 적으로 커밋해야하는 이유는 무엇입니까? (0) | 2018.11.06 |
[PYTHON] 파이썬에서 함수가 오버라이드되는 것을 막는 법 (0) | 2018.11.06 |