>

(28,28) 배열 a 가 있습니다 . 그리고 (28,28,3) 배열 b 를 얻고 싶습니다  성. b[i][j][0] = b[i][j][1] = b[i][j][2] = a[i][j] .

지루한 for 루프없이이 작업을 수행 할 수있는 수많은 단축키가 있습니까?

  • 답변 # 1

    >>> import numpy as np
    >>> a = np.zeros((28,28))
    >>> b = np.dstack((a,a,a))
    >>> a.shape
    (28, 28)
    >>> b.shape
    (28, 28, 3)
    
    

    예 :

    >>> a = np.array([[1,2],[3,4]])
    >>> b = np.dstack((a,a,a))
    >>> a
    array([[1, 2],
           [3, 4]])
    >>> b
    array([[[1, 1, 1],
            [2, 2, 2]],
           [[3, 3, 3],
            [4, 4, 4]]])
    
    

  • 답변 # 2

    a 에 축을 추가 할 수 있습니다  그런 다음 n=3 를 반복하십시오.  시간 :

    >>> a = np.random.randn(28, 28)
    >>> b = np.repeat(np.atleast_3d(a), repeats=3, axis=-1)
    >>> b.shape 
    (28, 28, 3)
    
    

    필요에 따라

    >>> np.all(a == b[...,0])
    True
    >>> np.all(b[...,0] == b[...,1])
    True
    >>> np.all(b[...,1] == b[...,2])
    True
    
    

  • 답변 # 3

    b 를 할당 할 수 있습니다  방송 사용 :

    b = np.empty(a.shape + (3,), a.dtype)
    b[...] = a[..., None]
    
    

    읽기 액세스 만 필요한 경우 매우 효율적인 방법은 스트 라이딩 된 뷰를 만드는 것입니다.

    c = np.lib.stride_tricks.as_strided(a, a.shape + (3,), a.strides + (0,))
    
    

    이 데이터는 a 와 공유합니다  당신이 c 에 쓸 때 의미 a  또한 변경됩니다. 또한 마지막 축을 따라 보폭은 0을 의미합니다. 예를 들어 c [1, 1, 0] 및 c [1, 1, 2]는 동일한 메모리이며, 하나를 변경하면 다른 하나도 변경됩니다. 원하지 않는 경우 사본을 만드십시오 :

    b = c.copy()
    
    

관련 자료

  • 이전 c++ - 값 없이도 값을 초기화 할 수있는 경우 생성자를 사용해야하는 이유는 무엇입니까?
  • 다음 안드로이드 sqlite에서 커서를 닫는 것의 중요성은 무엇입니까?