NumPy常见的数组操作整理

1.修改数组的形状

  1. reshape :不改变数据
  2. flat :        数组迭代器
  3. flatten:    返回一份数据拷贝
  4. ravel:      返回展开的数组

flat迭代器的使用:

for element in a.flat:

     print(element)

flatten:返回一份拷贝的数据:

ndarry.flatten(order='C')    #order可选

reval展开数组:

ndarray.reval(order='C‘)    #order可选

2.翻转数组

  1. transpose 对换数组维度
  2. ndarray.T 与transpose相同
  3. rollaxis     向后滑动指定的轴
  4. swapaxes 对换数组的两个轴
import numpy as np
a=np.arange(12).reshape(3,4)
print('原数组')
print(a)
print('转置数组')
print(a.T)

运算结果:

原数组
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
转置数组
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

Process finished with exit code 0

* numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:

numpy.rollaxis(arr,axis,start)

  • arr:数组
  • axis:要向后滚动的轴,其它轴的相对位置不会改变
  • start:默认为零,表示完整的滚动。会滚动到特定位置。

numpy.swapaxes

用于转换数组的两个轴,格式如下:

numpy.swapaxes(arr,axis1,axis2)

  • arr:输入的数组
  • axis1:对应第一个轴的整数
  • axis2:对应第二个轴的整数

numpy.broadcast

numpy.broadcast 用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果。

该函数使用两个数组作为输入参数,如下实例:

x=np.array([[1],[2],[3])

y=np.array([4,5,6])

b=np.broadcast(x,y)  #对x y 进行广播,并且拥有自身组件的迭代器元组

r,c=b.iters

print(next(r),next(c)) #对x y进行广播

print(shape)  #返回广播对象的形状

numpy.expend_dims

该函数通过在指定位置插入新的轴来扩展数组的形状:

numpy.expend_dims(arr,axis)

arr:输入数组

axis:新轴插入的位置

numpy.squeeze 函数从给定数组的形状中删除一维的条目,函数格式如下:

numpy.squeeze(arr, axis)
  • arr:输入数组
  • axis:整数或整数元组,用于选择形状中一维条目的子集
 

3.连接数组

concatenate : 连接沿着现有轴数组的序列

stack :            沿着新的轴加入一系列数组

hstack:           水平堆叠序列中的数组

vstack:            垂直堆叠序列中的数组

例如对于 a b 两个数组

 print (np.concatenate((a,b))) #'沿轴 Y 连接两个数组

 print (np.concatenate((a,b),axis = 1))#'沿轴 X 连接两个数组

4.分割数组

split:   将一个数组分割为多个子数组
hsplit: 将一个数组水平分割为多个子数组(按列)
vsplit: 将一个数组垂直分割为多个子数组(按行)

5.数组元素的添加与删除

resize   返回指定形状的新数组

append 将值添加到末尾

insert    沿着指定的轴将值插入到指定下标之下

delete   删除某个轴的子数组,并返回删除后的新数组

unique  查找数组内的唯一元素

   resize的应用:

格式:numpy.resize(arr, shape)
b = np.resize(a,(3,3)) print (b)

   append的应用:格式:numpy.append(arr, values, axis=None)print


(np.append(a, [7,8,9]))#像数组a添加元素
(np.append(a,[[7,8,9]],axis=0) #沿着Y轴添加元素

insert的应用: 格式:numpy.insert(arr,obj,values,axis)
print (np.insert(a,3,[11,12])) 就是指在数组a的下标3上插入数组[11,12]d

   delect的应用:

Numpy.delete(arr, obj, axis)
  • arr:输入数组
  • obj:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组
  • axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开

    如删除数组a的第二列:  np.delete(a,1,axis = 1))  

a=np.arange(12).reshape(3,4)
print('原数组')
print(a)
print(' ')
print(np.delete(a,1,axis = 0))

运行结果:

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


[[ 0 1 2 3] [ 8 9 10 11]] Process finished with exit code 0

 np.delete(a,1,axis = 0)中是对第二行进行删除操作

numpy.unique

去除数组中的重复元素

numpy.unique(arr,return_index,return_inverse,return_counts)

  • arr:输入数组,如果不是一维数组则会展开
  • return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
  • return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
  • return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
# 去除数组中重复的元素 unique
au = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

u=np.unique(au)
u,indices=np.unique(au,return_inverse=True)
print(u)
print(' ')
print(indices)

运行结果:

[2 5 6 7 8 9]


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

Process finished with exit code 0
原文地址:https://www.cnblogs.com/supershuai/p/12219299.html