>source

다음과 같이 파이썬 목록에서 numpy 배열을 만들 수 있습니다.

>>> a = [1,2,3]
>>> b = np.array(a).reshape(3,1)
>>> print(b)
[[1]
 [2]
 [3]]

그러나 다음 코드에서 오류의 원인을 모르겠습니다.

코드 :

>>> a = [1,2,3]
>>> b = np.full((3,1), a)

오류 :

ValueError                                Traceback (most recent call last)
<ipython-input-275-1ab6c109dda4> in <module>()
      1 a = [1,2,3]
----> 2 b = np.full((3,1), a)
      3 print(b)
/usr/local/lib/python3.6/dist-packages/numpy/core/numeric.py in full(shape, fill_value, dtype, order)
    324         dtype = array(fill_value).dtype
    325     a = empty(shape, dtype, order)
--> 326     multiarray.copyto(a, fill_value, casting='unsafe')
    327     return a
    328 
<__array_function__ internals> in copyto(*args, **kwargs)
ValueError: could not broadcast input array from shape (3) into shape (3,1)

비록 목록 a 그 안에 3 개의 요소가 있고 3x1 numpy 배열이 예상됩니다. full() 방법이 그것을 전달하지 못합니다. numpy의 방송 기사도 참조했습니다. 그러나 그들은 산술 연산 관점에 훨씬 더 집중되어 있으므로 거기에서 유용한 것을 얻을 수 없었습니다.

그래서 b/w의 차이를 이해하도록 도와 주시면 좋겠습니다. 위에서 언급 한 배열 생성 방법과 오류의 원인도 마찬가지입니다.

  • 답변 # 1

    Numpy는 목록이 '행 벡터'로 해석되기 때문에 두 모양을 함께 브로드 캐스트 할 수 없습니다 ( np.array(a).shape = (3,) ) '열 벡터'(모양 = (3, 1) ). 사용 설정 한 경우 np.full , 그런 다음 처음에 목록을 열 벡터로 만들 수 있습니다.

    >>> import numpy as np
    >>>
    >>> a = [[1],[2],[3]]
    >>> b = np.full((3,1), a)
    
    

    또 다른 옵션은 a 미리 numpy 배열에 넣고 원하는 출력 모양과 일치하는 새 축을 추가하십시오.

    >>> a = [1,2,3]
    >>> a = np.array(a)[:, np.newaxis]
    >>> b = np.full((3,1), a)
    
    

관련 자료

  • 이전 plot - gnuplot에서 두 곡선 사이의 영역 채우기
  • 다음 javascript - 클릭해도 버튼 색상이 변하지 않나요?