NUMPY的學習之路(2)——索引,合並,分割,賦值


一、索引

1.1numpy數組的轉置

A=np.arange(3,15).reshape(3,4)
print(A)

print(A[2][0])
print(A[2,1])
print(A[2,:])#用冒號代替這一行所有的數  第二行的所有的數
print(A[:,1])#第一列的所有數
# 第一行的從1到3的值
print(A[1,1:3])

結果:

1.2矩陣的轉置以及將矩陣轉化為array

A=np.arange(3,15).reshape(3,4)
print(A)
for col in A.T:
    #迭代a的列就是 迭代A的轉置的行
    print(col)

a=A
print(a.flatten())#返回被改變的array
for item in a.flat:#a.flat 表示的是一個迭代期
    print(item)

結果:

二、矩陣的合並

 2.1基本上用 concatenate函數對矩陣進行合並

# array的合並
a=np.array([1,1,1])
b=np.array([2,2,2])

c=np.vstack((a,b))#縱向疊加成矩陣
print("縱向疊加:")
print(c)
print("為了之后的合並,我們對array進行reshape")
a=a.reshape(3,1)
print("reshape a:")
print(a)
b=b.reshape(3,1)
print("reshape b:")
print(b)
print("左右合並:")
d=np.hstack((a,b))#左右合並成一個矩陣 如果是序列的話 就是序列+序列=序列
print(d)
#
# # 想把a變成一個豎向的序列
# print(a.reshape(3,1))

# 多個arrayd 縱向或者橫向的合並
print("多個矩陣或者array的合並")
c=np.concatenate((a,b,b,a),axis=0)#0是在上下的維度進行合並 按列合並
print("在上下維度合並")
print(c)
c=np.concatenate((a,b,b,a),axis=1)#0是在左右的維度進行合並 按行合並
print("在左右維度合並")
print(c)

結果:

縱向疊加:
[[1 1 1]
 [2 2 2]]
為了之后的合並,我們對array進行reshape
reshape a:
[[1]
 [1]
 [1]]
reshape b:
[[2]
 [2]
 [2]]
左右合並:
[[1 2]
 [1 2]
 [1 2]]
多個矩陣或者array的合並
在上下維度合並
[[1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]
 [1]
 [1]
 [1]]
在左右維度合並
[[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]

Process finished with exit code 0

三、矩陣的分割

3.1等量的分割

a=np.array([1,1,1])
b=np.array([2,2,2])
# array的分割
a=np.arange(12).reshape(3,4)
print(a)

print(np.split(a,2,axis=1))#要切割的矩陣 分割為幾塊 分割為行還是列   1表示分割為行(這里把行分為2列)
print(np.split(a,3,axis=0))#按列分為三塊 把每一列分為三塊 這邊最好還是注意下axis 的值和對應的意思

結果:

[[ 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]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

Process finished with exit code 0

3.2不等量的分割

a=np.arange(12).reshape(3,4)
print(a)
# 如何進行不等量的分割
a=np.array_split(a,3,axis=1) #這里是把每行元素分成了三份
print(a)

結果:

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

Process finished with exit code 0

3.3分割的其它辦法

# array的分割
a=np.arange(12).reshape(3,4)
print(a)

# 分割的其它辦法
print(np.vsplit(a,3))#v代表垂直分割
print(np.hsplit(a,2))#h代表水平分割

結果:

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

四、array的相關賦值

其實就是就是如果想不相關,但是值是一樣,那就用.copy(),這就叫深度復制

# array的相關賦值
a=np.arange(4)
print(a)
b=a#b就是指向ad 引用
c=a
d=b
a[0]=11
print(a)
print(b)
print(b is a)#可以看下是不是同一個a
print(a is d)#發現是同一個維度的
d[1:3]=[22,33]
print(a)#你改了不管其中那一個 都會變的
# 如果我們不想關聯起來
b=a.copy()#deep copy 賦值但沒有關聯
a[3]=44
print(a)
print(b)

結果:

[0 1 2 3]
[11  1  2  3]
[11  1  2  3]
True
True
[11 22 33  3]
[11 22 33 44]
[11 22 33  3]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM