โดยพื้นฐานแล้วฟังก์ชั่นการแปลงสัญญาณคือการสลับรูปร่างและความก้าวหน้าของอาร์เรย์:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
ในกรณีของอาร์เรย์ 1D (อาร์เรย์อันดับ 1) รูปร่างและความก้าวหน้าเป็น 1-tuples และไม่สามารถสลับได้ แต่คุณสามารถเปลี่ยน "row-vector" (อาเรย์ของรูปร่าง(1, n)
) ไปเป็น "column-vector" (อาเรย์ของรูปร่างที่มีรูปร่าง(n, 1)
) เพื่อให้บรรลุสิ่งนี้คุณต้องแปลงอาร์เรย์ 1D numpy ของคุณเป็นแถวเวกเตอร์แล้วสลับรูปร่างและความก้าวหน้า (แปลงเป็น) ด้านล่างเป็นฟังก์ชั่นที่ทำ:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
ตัวอย่าง:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
แน่นอนคุณจะได้ไม่ต้องทำวิธีนี้เนื่องจากคุณมีอาร์เรย์ 1D และคุณโดยตรงสามารถก่อร่างใหม่ลงใน(n, 1)
อาร์เรย์โดยหรือa.reshape((-1, 1))
a[:, None]
ฉันแค่ต้องการแสดงให้เห็นว่าการแปลงอาเรย์เป็นอย่างไร