numpy数组操作(反转和连接)

numpy数组的操作

反转操作:

  • numpy.reshape()
  • numpy.ndarray.flatten (numpy.flat)
  • numpy.ndarray.T()

连接操作:

  • numpy.concatenete()
  • numpy.stack()
  • numpy.vstack()

numpy.reshape():

import numpy as np

a = np.array([[1,2,3,4],[5,6,7,8],[3,4,6,6]])
a
b = a.reshape(2,6)
b

-----------------------
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [3, 4, 6, 6]])
       
array([[1, 2, 3, 4, 5, 6],
       [7, 8, 3, 4, 6, 6]])
b1 = a.reshape(2,6,order = 'F') # 竖着排
b1

-----------------
array([[1, 3, 6, 3, 6, 8],
       [5, 2, 4, 7, 4, 6]])

np.ndarray.flat与np.ndarray.flatten()

flat返回的是一个迭代器,可以用for访问数组每一个元素

flatten将数组的副本转换为一个维度,并返回
ndarray.flatten(order = ‘C’)
可选参数,order;{‘C’,‘F’,‘A’,‘K’}

  • ‘C’:行序优先
  • ‘F’:列序优先
  • ‘A’:if a is Fortran contiguous in memory,flatten in column_major order
  • ‘K’:按照元素在内存出现顺序进行排序
    默认为‘C’
a = np.array([[1,2,3,4],[5,6,7,8],[3,4,6,6]])
c = a.flat
c

-------------------

print(list(c))

----------------
[1, 2, 3, 4, 5, 6, 7, 8, 3, 4, 6, 6]
for i in a.flat:
   print(i,end = ' ')

-----------
1 2 3 4 5 6 7 8 3 4 6 6 
print(a.flatten()) # 不是列表,是ndarray,生成的是副本
a

------------------
[1 2 3 4 5 6 7 8 3 4 6 6]

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

nd.ndarray.T转置

print(a.T)

-------------------
[[1 5 3]
 [2 6 4]
 [3 7 6]
 [4 8 6]]

np.comcatenate() 连接组合
传入的参数必须是一个多个数组的元祖或者列表
传入的数组必须有相同的形状

需要指定拼接方向,默认是axis=0

numpy axis=0与axis=1

numpy数组操作(反转和连接)_第1张图片
二维数据拥有两个轴:0轴沿着行垂直往下,1轴沿着列水平延伸

a = np.arange(6).reshape(2,3)
a
print("----------")
b = np.array([[2,3,4],[4,5,6]])
b
print("-----------")
print(np.concatenate((a,b)))#默认沿着0轴进行连接,要列相同

print('------------')
print(np.concatenate((a,b),axis=1))# 要行相同

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


array([[2, 3, 4],
[4, 5, 6]])


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


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

#np.hstack # 水平方向堆叠,axis= 1
print(np.hstack((a,b)))

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

#np.vstack #竖直方向,axis=0
print(np.vstack((a,b)))

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

#np.stack(array.axis = 0)
#如果axis = 0,它将是第一个维度,axis=1,它将是最后一个维度

print(np.stack((a,b),0)) # 沿着0轴堆叠两个矩阵

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

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

print(np.stack((a,b),1))  # 沿着1轴堆叠两个矩阵

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

[[3 4 5]
[4 5 6]]]

np.split()分割数组

#numpy.split(ary,indices_sections,axis)
a = np.arange(12)
print(a)
b = np.split(a,3) #分成三等分
b

[ 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])]

c = np.split(a,[4,7])#在4和7处分割
c

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

d=np.split(a,[0,3,6])
d

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

#np.hsplit

a=np.arange(16).reshape(4,4)
print(a)

b = np.hsplit(a,2) # 从第二列分开
b

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]

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

c = np.vsplit(a,2) #从第二行分开
c

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

np.append() 往数组中添加元素

a = np.arange(10).reshape(2,5)
print(a)
print('-------------')
print(np.append(a,[10,11,12]))
print("-------------")
print(np.append(a,[[10,11,12,13,14]],axis = 0))# 沿着0轴进行添加

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


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


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

print(np.append(a,[[6,6,6],[7,7,7]]))

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

print(np.append(a,[[6,6,6,],[7,7,7]],axis = 1))

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

np.insert()
np.insert(ary,obj,values,axis)

  • arr是一个数组,可以是一维的,也可以是多维的,在arr的基础上插入元素
  • obj是元素插入的位置
  • values是需要插入的数值
  • axis是指示在哪一个轴上对应的位置插入

第四个参数没有给出,就默认先对arr进行flatten操作,变为一维数组,
然后在对应的位置插入相应的值


a = np.array([[1,2],[3,4],[5,6]])
print(a)
print(np.insert(a,6,[8,9])) # 没有axis参数则把原数组拉成一行然后添加
print(np.insert(a,2,[8,9]))  # 在索引为2的位置上添加

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

print(np.insert(a,1,[8,9],axis = 0)) #索引为1的那一行添加

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

print(np.insert(a,1,[8,9,10],axis = 1))#在索引为1 的列添加一列

[[ 1 8 2]
[ 3 9 4]
[ 5 10 6]]

np.delete()
np.delete(arr,obj,axis)
arr:输入向量
obj:表明哪一个字向量应该被移除。可以为整数或int型的向量
axis:表明删除哪个轴的字向量,若默认,则返回一个被拉平的向量

a
print(np.delete(a,3)) 

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

print(np.delete(a,2,axis = 0)) # 删除索引为2 的行

[[1 2]
[3 4]]

print(np.delete(a,1,axis = 1)) # 删除索引为1 的列

[[1]
[3]
[5]]

np.unique()
去除数组中的重复数字,并排序后输出

a = np.array([3,4,5,6,2,5,3,3,5,9,4])
print(np.unique(a))

[2 3 4 5 6 9]

aa = np.array([[3,4,2,6,6],[4,5,3,2,9]])
print(np.unique(aa))

[2 3 4 5 6 9]

你可能感兴趣的:(numpy数组操作(反转和连接))