numpy基础
import numpy as np
-
合并
1.上下合并
numpy.vstack()
首先定义两个一维的列表A,B
A = np.array([1,1,1]) B = np.array([2,2,2]) print(A) Print(B)
#A [1 1 1] #B [2 2 2]
上下(垂直方向)合并A,B
C = np.vstack((A,B)) print(C) print(C.shape)
[[1 1 1] [2 2 2]] (2, 3) #2行3列
2.左右合并
numpy.hstack()
D = np.hstack((A,B)) print(D) print(D.shape)
输出结果:
[1 1 1 2 2 2] (6,)
3.转置
newaxis
增加一个维度
相关代码
print(A) print(A.shape) print(A[np.newaxis,:].shape)
输出结果:
array([1, 1, 1]) (3,) # A为只有三个数的序列 (1, 3) # 在行上增加了一个维度后变成了1行3列的矩阵
将A序列由横向变为纵向(注意,A为只有3个数的序列,不可用A.T实现矩阵的转置)
相关代码:
print(A[:,np.newaxis].shape) print(A[:,np.newaxis])
输出结果:
(3, 1) [[1] [1] [1]]
4.多个array合并
numpy.concatenate()
其中,可用axis = 0 或 1 选择上下合并或是左右合并
axis = 0 表示左右合并
axis = 1 表示上下合并
相关代码:
C = np.concatenate((A,B,B,A),axis = 0) print(C)
输出结果:
array([1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1])
-
分割
首先,创建一个3行4列的矩阵
A = np.arange(12).reshape(3,4) print(A)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
1.等量分割
numpy.split()
相关代码:
B = np.split(A,2,axis = 1) # 表示将A矩阵分成2个矩阵,axis = 1为横向分割 print(B)
输出结果:
[array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])]
C = np.split(A,3,axis = 0) # 表示将A矩阵分成2个矩阵,axis = 0 为纵向分割 print(C)
输出结果:
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
另外,numpy.vsplit() 可用于纵向分割(上下)
numpy.hsplit() 可用于横向分割(左右)
2.不等量分割
numpy.array_split()
相关代码:
D = np.array_split(A,3,axis = 1) # 若想把A进行横向分割且分成三份,为不等量的分割。若采用numpy.split会报错 print(D)
输出结果:
[array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])]
-
复制
首先,创建一个简单的序列
a = np.arange(4) print(a)
array([0, 1, 2, 3])
使用等号直接复制
b = a c = a d = b #此时,若改变a,bcd都会改变 a[0] = 11 print(a) print(b) print(c) print(d)
输出结果:
[11 1 2 3] [11 1 2 3] [11 1 2 3] [11 1 2 3]
同样,若改变b,c,d中的数字,其余的都会有同样的改变
d[1:3] = [22,33] print(a) print(b) print(c) print(d)
输出结果:
[11 22 33 3] [11 22 33 3] [11 22 33 3] [11 22 33 3]
此外,若采用deep copy的方式则可避免上述情况
例如:
e = a.copy() print(e) print(a)
[11 22 33 3] [11 22 33 3]
若改变a中的值,e不会有所改变
a[3] = 44 print(e) print(a)
[11 22 33 3] [11 22 33 44]