numpy数组操作

数组转置

import numpy as np
a = np.arange(12).reshape(4,3)
print(a)
print(a.T)
print(np.transpose(a))

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
 
[[ 0  3  6  9]
 [ 1  4  7 10]
 [ 2  5  8 11]]
 
[[ 0  3  6  9]
 [ 1  4  7 10]
 [ 2  5  8 11]]

转动轴

rollaxis(arr, axis, start=0)转动数组arr的axis轴到start前面。如rollaxis(arr,2,0)即arr[轴0][轴1][轴2]变成
arr[轴1][轴2][轴0],即arr[0][0][0]变成arr[0][0][0],arr[0][0][1]变成arr[0][1][0],arr[0][1][0]变成arr[1][0][0],以此类推。

a = np.arange(8).reshape(2,2,2)
print ('原数组:')
print (a)
# 将轴 2 滚动到轴 0
print ('调用 rollaxis 函数:')
print (np.rollaxis(a,2)) #等价于np.rollaxis(a,2,0)

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
调用 rollaxis 函数:
[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]

在指定位置插入轴

np.expand_dims(arr, axis).在arr的axis新插入一个轴,如arr是一个2,3数组,在axis=0插入轴,则变成1,2,3.在axis=1插入轴则变成2,1,3.

import numpy as np
a = np.arange(6),reshape(2,3)
print(a)
b = np.expand_dims(a,axis=0)#b的shape是(1,2,3)
print(b)
c = np.expand_dims(a,axis=1)#c的shape是(2,1,3)
print(c)

[[0 1 2]
 [3 4 5]]
 
[[[0 1 2]
  [3 4 5]]]
  
[[[0 1 2]]
 [[3 4 5]]]

数组连接

np.concatenate((a1, a2, …),axis),按照axis轴连接数据a1,a2…
如一个(2,2)数组和一个(1,2)数组在axis=0轴连接,变成一个(3,2)数组。
一个(2,2)数组和一个(2,1)数组在axis=1轴连接,变成一个(2,3)数组。
可以看出拼接的数据之间要求:在拼接的维度axis可以不同,在其他维度必须相同。

import numpy as np
a = np.array([[1,2],[3,4]],dtype=int)#a.shape=(2,2)
b = np.array([[5,6]],dtype=int) #b.shape=(1,2)
c = np.array([[5],[6]],dtype=int)#c.shape=(2,1)
d = np.concatenate([a,b],axis=0)#d.shape=(2+1,2)
print(d)
e = np.concatenate([a,c],axis=1)#e.shape=(2,2+1)
print(e)
[[1 2]
 [3 4]
 [5 6]]
 
[[1 2 5]
 [3 4 6]]

#数组堆叠
np.stack(arrays, axis=0)按指定axis轴堆叠数组
进行stack的两个数组必须有相同的形状,同时,输出的结果的维度是比输入的数组都要多一维的.
np.stack([a,b], axis=0) 假如a.shape=b.shape=(2,3)
过程:1将进行stack的数组a,b,在指定的axis增加一个维度,a.shape=b.shape=(1,2,3).
2将增加维度后的a,b两个数组在指定的axis进行concatenate。

import numpy as np
a = np.array([1,2,3]),dtype=int)
b = np.array([2,3,4]),dtype=int)
print(np.stack([a,b],axis=1) 
#等价于
a = a[:,np.newaxis]
b = b[:,np.newaxis]
print(np.concatenate([a,b],axis=1))

[[1 2]
 [2 3]
 [3 4]]
#二维数组
a = np.array([[1,2,3]],dtype=int)
b = np.array([[2,3,4]],dtype=int)
print(np.stack([a,b],axis=0))
#等价于
a = a[np.newaxis,:,:]
b = b[np.newaxis,:,:]
print(np.concatenate([a,b],axis=0))
[[[1 2 3]]
 [[2 3 4]]]
 
[[[1 2 3]]
 [[2 3 4]]]

vstack

如果堆叠的数组都是大于1维。则np.vstack([a,b]) = np.concatenate([a,b],axis=0)

import numpy as np
#二维及以上数组
a=[[1,2],[3,4]]
b=[[7,8],[9,10]]
print(np.vstack([a,b]))
print(np.concatenate([a,b],axis=0))
[[ 1  2]
 [ 3  4]
 [ 7  8]
 [ 9 10]]
 
[[ 1  2]
 [ 3  4]
 [ 7  8]
 [ 9 10]]
 
#一维数组
a = [1,2,3]
b = [4,5,6]
print(np.vstack([a,b]))

[[1 2 3]
 [4 5 6]] 

hstack

同理
如果堆叠的数组都大于1维,则np.hstack([a,b]) = np.concatenate([a,b],axis=1)

分隔数组

np.split(arr,indices_or_sections,axis)
indices_or_sections:如果是整数,则arr按照axis轴方向除以indices_or_sections,平均分成几份,如果是数组,则表示r按照axis轴要分隔的下标

import numpy as np
#一维数组
a = np.arange(10,dtype=int)
b = np.split(a,2)
print(b)
c = np.split(a,[3,5])
print(c)
#[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]
#[array([0, 1, 2]), array([3, 4]), array([5, 6, 7, 8, 9])]

#二维数组
a = np.arange(8).reshape(2,4)
b = np.split(a,2,axis=1)
print(b)
#[[0 1 2 3]
# [4 5 6 7]]

#[array([[0, 1],
#       [4, 5]]), array([[2, 3],
#       [6, 7]])]

c = np.split(a,[1,2],axis=1)
print(c)
#[[0 1 2 3]
# [4 5 6 7]]
#[array([[0],
#       [4]]), array([[1],
#       [5]]), array([[2, 3],
#       [6, 7]])]

np.vsplit()

np.vsplit(arr) = np.split(arr,axis=0)

np.hsplit()

np.hsplit(arr) = np.split(arr,axis=1)

引用

https://www.runoob.com
numpy中的hstack()、vstack()、stack()、concatenate()函数详解
关于numy中np.expand_dims方法的理解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值