numpy学习笔记(02)

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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值