在Numpy中對一維陣列做轉置,得到的還是一維陣列本身。這與matlab的習慣不同。在matlab中認爲一維陣列是一個行向量,轉置之後應該得到列向量。那麼如何得到想要的向量或轉置矩陣呢?
import numpy as np
a=np.array(np.linspace(1, 6, 6))
print("a.T", a.T)
print(a.T.shape)
輸出爲
a.T [1. 2. 3. 4. 5. 6.]
(6,)
這是因爲a是一維陣列,既不是列向量又不是行向量。想要求a的轉置,可使用reshape(-1, 1)。
import numpy as np
a=np.array(np.linspace(1, 6, 6))
print("a.reshape(-1, 1)", a.reshape(-1, 1))
print(a.reshape(-1, 1).shape)
輸出爲
a.reshape(-1, 1) =
[[1.]
[2.]
[3.]
[4.]
[5.]
[6.]]
(6, 1)
一維列向量可以直接使用np.T進行轉置,轉置後得到一維行向量。
import numpy as np
a=np.array(np.linspace(1, 6, 6))
b=a.reshape(-1, 1)
print("b.T", b.T)
print("b.T.shape", b.T.shape)
輸出爲
b.T [[1. 2. 3. 4. 5. 6.]]
b.T.shape (1, 6)
Numpy在處理數據的時候,經常會有切片操作,如提取指定幾行的數據或者幾列的數據。
但是在切片過程中,對多維陣列切取單行或單列,使用[i,:]時得到單行或者使用[a:b, 1]得到單列時,返回值是一維陣列。但是對兩個軸同時進行切片,則可以得到一維向量。比如[i:i+1,:]得到的行向量,值對應第i行,而[i:i+k, 1:2]得到的列向量,值對應第i列。
a=np.array(np.linspace(1, 24, 24)).reshape(3, 4, 2)
b=a[1,1:2, :]
print("\na[1,1:2, :]=", b)
print("a[1,1:2, :].shape", b.shape)
c=a[1, 1, :]
print("\na[1, 1, :]=", c)
print("a[1, 1, :].shape", c.shape)
f=a[1, 1:3, :]
print("\na[1, 1:3, :]=\n", f)
print("a[1, 1:3, :].shape", f.shape)
d=a[1, 1:3, 1]
print("\na[1, 1:3, 1]=", d)
print("a[1, 1:3, 1].shape", d.shape)
e=a[1, 1:3, 1:2]
print("\na[1, 1:3, 1:2]=\n", e)
print("a[1, 1:3, 1:2].shape", e.shape)
輸出爲
a[1,1:2, :]= [[11. 12.]]
a[1,1:2, :].shape (1, 2)
a[1, 1, :]= [11. 12.]
a[1, 1, :].shape (2,)
a[1, 1:3, :]=
[[11. 12.]
[13. 14.]]
a[1, 1:3, :].shape (2, 2)
a[1, 1:3, 1]= [12. 14.]
a[1, 1:3, 1].shape (2,)
a[1, 1:3, 1:2]=
[[12.]
[14.]]
a[1, 1:3, 1:2].shape (2, 1)