關於numpy的索引、合併、分割

尼桑是隻菜雞發表於2020-10-18
  • 單個矩陣元素索引
print(A[2][1])
print(A[2,1])

結果相同

#冒號代替整行或整列
print(A[2,:])
print(A[:,1])
#第一行從1到2的數
print(A[1,1:2])
  • 關於矩陣中的元素操作:
#迭代行
for row in A:
    print(row)
#迭代列
for col in A.T:
    print(col)
#迭代元素
# 返回array
print(A.flatten())
#返回迭代器
for item in A.flat:
    print(item)

A.flatten()結果是:[ 3 4 5 6 7 8 9 10 11 12 13 14]
A.flat結果是:
3
4
5
6
7
8
9
10
11
12
13
14

矩陣合併:

import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
#上下合併矩陣
C = np.vstack((A,B))
#左右合併
D = np.hstack((A,B))

C:[[1 1 1]
[2 2 2]]
D:[1 1 1 2 2 2]

#將以為矩陣轉置
#增加維度
print(A)
print(A.shape)
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)

結果:
[1 1 1]
(3,)
[[1 1 1]]
(1, 3)
A[np.newaxis,:]是增加橫向維度
A[:,np.newaxis]是增加縱向維度

print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)

[[1]
[1]
[1]]
(3, 1)

A1 = np.array([1,1,1])[:,np.newaxis]
B1 = np.array([2,2,2])[:,np.newaxis]
D1 = np.hstack((A1,B1))
print(D1)

[[1 2]
[1 2]
[1 2]]

  • 多個矩陣合併:
#多個矩陣合併
E = np.concatenate((A1,B1,B1),axis=0)
E1 = np.concatenate((A1,B1,B1),axis=1)
print(E)
print(E1)

E:
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]]
E1:
[[1 2 2]
[1 2 2]
[1 2 2]]
axis選擇行列進行合併操作

  • 矩陣分割:
A = np.arange(12).reshape((3,4))
print(A)
# 將矩陣進行分割,如:將矩陣A以列分割成相等的2部分
print(np.split(A,2,axis=1))

矩陣A:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
分割後:
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]

#不等量分割
print(np.array_split(A,3,axis=1))

[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]

另一種分割函式:

#縱向分割
print(np.vsplit(A,3))
#橫向分割
print(np.hsplit(A,2))

相關文章