Numpy的一位陣列、向量、矩陣以及其轉置、矩陣乘法

2020-08-13 20:43:30

  在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)