numpy学习笔记(三)
对于一个二维矩阵
a = array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
#如果使用以为的索引会出现这样的结果
a[1]
Out[4]: array([5, 6, 7, 8])
#如果我们想单独跳出一个数字,则需要讲哪一行哪一列表示出来
a[1][2] #或者a[1,2]
Out[5]: 7
#需要索引哪一列的数字时我们使用
a[:,0]
Out[7]: array([1, 5, 9])
#索引某一段的数字
a[0:2,0]
Out[10]: array([1, 5])#索引第一列第1第2个数字
我们可以通过FOR循环将数组编历出来
for cow in A:
print(cow)
通过迭代将每一个项目迭代出来
for item in a.flat: #将矩阵通过.flat来转变为一个只有一行的序列
print(item)
矩阵上下合并:
a = array([0, 1, 2, 3, 4])
b = array([5, 6, 7, 8, 9])
np.vstack((a,b)) #vertical stack 垂直堆叠 A在上B在下
Out:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
矩阵左右合并:
np.hstack((a,b))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
改变矩阵的形状,横向变竖向:
#普通的横向数列
a = array([0, 1, 2, 3, 4])
#增加横向维度
a[np.newaxis,:]
Out[9]: array([[0, 1, 2, 3, 4]])
#增加列向维度
a = a[:,np.newaxis]
Out[10]:
array([[0],
[1],
[2],
[3],
[4]])
#将多维数组转换成一整行
a.flatten()
使数列变为纵向并合并:
a = a[:,np.newaxis]
b = b[:,np.newaxis]
c = np.hstack((a,b))
c
Out[22]:
array([[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]])
简单的等分分割
#定义一个3行4列的数组
a = array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
#纵向分割
np.split(a,2,axis = 1) #纵向分割分成两个
[array([[ 1, 2],
[ 5, 6],
[ 9, 10]]), array([[ 3, 4],
[ 7, 8],
[11, 12]])]
np.hsplit(a,2)#这样也可以实现纵向分割
#横向分割成三块
np.split(a,3,axis=0)
Out: [array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]
np.vsplit(a,2)#与hsplit同理,不过是横向
但是这种分割方法不能满足不等的分割
#我们可以通过np.array_split函数来实现不等分的分割
np.array_split(a,2,axis=1)
Out[10]:
[array([[ 1, 2],
[ 5, 6],
[ 9, 10]]), array([[ 3, 4],
[ 7, 8],
[11, 12]])]
#通过这样的分割,第一块被分割的区域会比后面的偏大
Array之间的赋值
#普通的array之间的赋值
#a = b
#b = d
#那么这三个array都会相等
#我们可以通过b = a.copy()来使a 与b 的值不同步 deep copy
A= array([1, 2, 3])
B = A
B = array([1, 2, 3])
b = A.copy()
A[1] = 4
B = array([1, 4, 3])
b = array([1, 2, 3])