답변:
좀 더 읽기 쉬운 것을 원한다면 다음과 같이하십시오.
A = np.squeeze(np.asarray(M))
동등하게, 당신은 또한 할 수 있습니다 : A = np.asarray(M).reshape(-1)
, 그러나 조금 덜 읽기 쉽습니다.
numpy.matrix
는 다소 논쟁의 여지가 있지만, numpy 개발자는 모두 여러 가지 이유로 비현실적이고 성가신다는 것에 동의합니다. 그러나 사용 matrix
하지 않는 오래된 "유효하지 않은"코드를 사용 하면 코드 를 완전히 제거하기가 어렵습니다.
sklearn
. 실제로의 다른 sparse matrix
유형 이 있으므로 scipy
행 또는 열을 통해 효율적으로 액세스 할 수 있습니다. 이것이 매트릭스와 배열의 개념을 병합하는 데 문제가 될 수 있다고 생각합니다. 즉, sparse array
유형을 도입 할 수 있는지 여부 와 그 계획이 있는지 궁금합니다 . 단서가 있습니까?
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
np.array(M).ravel()
속도를 걱정한다면; 그러나 기억이 걱정된다면 :
np.asarray(M).ravel()
numpy의 ravel () 및 flatten () 함수는 여기서 시도 할 두 가지 기술입니다. Joe , Siraj , bubble , Kevad가 작성한 게시물에 추가 하고 싶습니다 .
얽힘:
A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)
반음 낮추다:
M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)
numpy.ravel()
배열의 복사본을 만들지 않는 라이브러리 수준 함수이므로 더 빠릅니다 . 그러나을 사용하는 경우 배열 A의 변경 사항은 원래 배열 M로 넘어갑니다numpy.ravel()
.
numpy.flatten()
보다 느립니다numpy.ravel()
. 그러나 numpy.flatten()
A를 만드는 데 사용 하는 경우 A의 변경 사항은 원래 배열 M으로 전달되지 않습니다 .
numpy.squeeze()
그리고 M.reshape(-1)
보다 느린 numpy.flatten()
하고 numpy.ravel()
.
%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop
%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop
%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop
%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop