Nhờ mọi người một chút về reshape numpy

numpy

#1

Mọi người cho mình hỏi làm sao để reshape mảng 3d như sau

A = np.array([[[0, 0, 0, 0], 
               [1, 1, 1, 1],
               [2, 2, 2, 2],
               [3, 3, 3, 3]],
       
               [[0, 0, 0, 0], 
               [1, 1, 1, 1],
               [2, 2, 2, 2],
               [3, 3, 3, 3]]])

# A.shape = (2, 4, 4)

thành mảng 2d như sau:

B = np.array([[0],
              [1],
              [2],
              [3],
              [0],
              [1],
              [2],
              [3],
              ...
              [0],
              [1],
              [2],
              [3]])

# B.shape = (32, 1)

Mình xin cảm ơn.


#3

Đây nhé bạn:

In [20]: A.reshape((8, -1)).reshape((-1, 1), order='F')
Out[20]:
array([[0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3]])

#4

Bạn chạy thử thì kết quả sẽ ra khác:

In [22]: A.reshape((-1, 1))
Out[22]:
array([[0],
       [0],
       [0],
       [0],
       [1],
       [1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [3],
       [3],
       [3],
       [3],
       [0],
       [0],
       [0],
       [0],
       [1],
       [1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [3],
       [3],
       [3],
       [3]])

#5

em cảm ơn ạ, em không để ý kỹ

A.transpose(0, 2, 1).reshape((-1, 1))
array([[0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3],
       [0],
       [1],
       [2],
       [3]])

#6

ok cảm ơn anh ạ :grinning:


#7

Mảng của bạn là mảng 1 chiều, vì thế dùng reshape(-1, 1) . Ở đây ‘’-1" có nghĩa khi ta không biết array có bao nhiêu phần tử nên đặt vậy cho nhanh :wink: