当前位置: 移动技术网 > IT编程>脚本编程>Python > NumPy 快速入门:数组对象的排序、插入、删除、添加及其他特殊方法介绍

NumPy 快速入门:数组对象的排序、插入、删除、添加及其他特殊方法介绍

2020年07月22日  | 移动技术网IT编程  | 我要评论

前言:

上两篇博客分别对 NumPy 中 数组概念、索引等基础内容算数运算、统计计算等常用计算方法 做了简单的介绍。本篇博客将继续介绍 NumPy 中的其他一些常用方法,分类两个方面:

  1. 类列表方法:排序、插入、添加删除等;
  2. 特殊方法。

1、类列表方法:

多维数组中的数据通常可以用 Python 的列表表达出来,只是会麻烦很多,数组对象中也有许多类似于列表操作的方法:

a. 数组的排序:

sort 方法可用于数组的排序:

sort(a, axis=-1, kind=None, order=None)

示例:

# 数组排序
g6 = np.array([[1,4],[3,2]])
print(np.sort(g6))
'''
[[1 4]
 [2 3]]
'''

特定轴方向上的排序:

print(np.sort(g6,axis=None))  # 丢弃轴,将数组变为一维后排序
# [1 2 3 4]
print(np.sort(g6,axis=0))
'''
[[1 2]
 [3 4]]
'''
b. 排序索引:

数组对象的排序相对于 Python 列表的简单排序还提供了获取排序的索引方法,如:

argsort :获取一维数组的排序索引

argsort(a, axis=-1, kind=None, order=None)

g7 = np.array([3,1,2])
print(np.argsort(g7))
# [1 2 0]

argmax、argmin :获取数组对象中最大值、最小值索引

argmax(a, axis=None, out=None)
argmin(a, axis=None, out=None)

print(np.argmax(g7))
# 0
print(np.argmin(g7))
# 1

searchsorted : 获取元素在数组中排序索引

searchsorted(a, v, side=‘left’, sorter=None)

示例:

print(np.searchsorted([1,2,4,5,6], 3))
# 2
print(np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3]))
# [0 5 1 2]

解析:其实 searchsorted 方法是获取第二个参数对象在 第一个参数中的排序索引。如 3 在 数组 [ 1,2,4,5,6 ] 应该排在第 2 位 (第一位为 0 )。

c. 数组的删除:

delete:删除数组中的某些元素:

delete(arr, obj, axis=None)

示例:

h5 = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print(h5)
'''
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
'''
print(np.delete(h5,0))
# [ 2  3  4  5  6  7  8  9 10 11 12]
print(np.delete(h5,1))
# [ 1  3  4  5  6  7  8  9 10 11 12]

解析:这里删除的 obj 是按索引进行删除的,并且如果不指定 axis 返回的是将多维数组展平的一维数组。

指定轴进行删除:

print(np.delete(h5,0,0))  # 删除行
'''
[[ 5  6  7  8]
 [ 9 10 11 12]]
'''
print(np.delete(h5,0,1))  # 删除列
'''
[[ 2  3  4]
 [ 6  7  8]
 [10 11 12]]
'''
d. 数组的插入:

insert:将元素插入到数组中的指定位置

insert(arr, obj, values, axis=None)

不指定轴方向:

h6 = np.array([[1, 1], [2, 2], [3, 3]])
print(np.insert(h6,1,5))
# [1 5 1 2 2 3 3]

指定轴方向:

print(np.insert(h6,1,5,axis=1))
'''
[[1 5 1]
 [2 5 2]
 [3 5 3]]
'''
e. 数组的增加:

append :在数组的末尾增加内容

append(arr, values, axis=None)

示例:

h8 = np.array([[1, 1], [2, 2], [3, 3]])
print(np.append(h8, 4))
# [1 1 2 2 3 3 4]

也可以指定轴方向,将元素添加到数组对象的末尾。但是注意:添加的对象维度需与元数组相同,示例:

print(np.append(h8,[[4,4]],axis=0))
'''
[[1 1]
 [2 2]
 [3 3]
 [4 4]]
'''
print(np.append(h8,[[1],[2],[3]],axis=1))
'''
[[1 1 1]
 [2 2 2]
 [3 3 3]]
'''

2、特殊方法:

a. linspace:等距取值

linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None,axis=0):

示例:

e1 = np.linspace(-2.5, 2.5, 6)
print(e1)
# [-2.5 -1.5 -0.5  0.5  1.5  2.5]
b. piecewise:分段赋值
e1 = np.linspace(-2.5, 2.5, 6)
print(e1)
# [-2.5 -1.5 -0.5  0.5  1.5  2.5]
e2 = np.piecewise(e1, [e1 < 0, e1 >= 0], [-1, 1])
print(e2)
# [-1. -1. -1.  1.  1.  1.]
c. select:条件选择

select(condlist, choicelist, default=0):

e3 = np.arange(6)
c3 = [e3 < 2, e3 > 3]
choice = [e3, e3 ** 2]
print(np.select(c3,choice))
# [ 0  1  0  0 16 25]
e4 = np.select(c3,choice,default=np.nan)
print(e4)
# [ 0.  1. nan nan 16. 25.]

解析:
NumPy 提供了许多根据条件来对数组元素进行取值的方法,如上节博客中的逻辑选择 where 方法,数组修剪 clip ,数组压缩 compress 方法,这里又出现 piecewise 和 select 方法,但是仔细分析会发现其适用情况是有区别的。后续会花一篇博客来详细讲讲以上几个方法的区别和各自适用场景。

d. diff:相邻元素差值

diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue)

e7 = np.array([[1, 3, 6, 10], [0, 5, 6, 8]])
e8 = np.diff(e7)
print(e8)
'''
[[2 3 4]
 [5 1 2]]
'''
e9 = np.diff(e7,axis=0)
print(e9)
# [[-1  2  0 -2]]
e. trim_zeros:去零操作

trim_zeros(filt, trim=‘fb’):

f1 = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0))
print(np.trim_zeros(f1))
# [1 2 3 0 2 1]
f. extract:返回满足条件元素

extract(condition, arr):

f2 = np.arange(12).reshape(3,4)
cf2 = np.mod(arr, 3) == 0
print(np.extract(cf2,f2))
# [0 3 6 9]
g. place: 依次替换符合条件值:

place(arr, mask, vals)

f3 = np.arange(6).reshape(2, 3)
print(f3)
'''
[[0 1 2]
 [3 4 5]]
'''
np.place(f3,f3>2,[6,5,7])
print(f3)
'''
[[0 1 2]
 [6 5 7]]
'''
h. take :按索引提取元素

take(a, indices, axis=None, out=None, mode=‘raise’)

g1 = [4, 3, 5, 7, 6, 8]
gi1 = [0, 1, 4]
g2 = np.take(g1,gi1)
print(g2)
# [4 3 6]
g3 = np.array(g1)
print(g3[gi1])
# [4 3 6]
gi2 = [[0,1],[2,3]]
print(np.take(g3,gi2))
'''
[[4 3]
 [5 7]]
'''

注:有点类似花式索引,但:当索引为嵌套列表,会返回和嵌套列表结构类型的多维数组。

i. repeat:重复

repeat(a, repeats, axis=None)

print(np.repeat(3,4))
# [3 3 3 3]

g4 = np.array([[1,2],[3,4]])
print(np.repeat(g4,2))
# [1 1 2 2 3 3 4 4]
print(np.repeat(g4,2,axis=1))
'''
[[1 1 2 2]
 [3 3 4 4]]
'''
print(np.repeat(g4,2,axis=0))
'''
[[1 2]
 [1 2]
 [3 4]
 [3 4]]
'''
j. put:替换

put(a, ind, v, mode=‘raise’)

g5 = np.arange(5)
np.put(g5,[0,2],[55,66])
print(g5)
# [55  1 66  3  4]
k. around:四舍五入

around(a, decimals=0, out=None)

h4 = np.array([1.1,1.6,2.4,0.44,4.56])
print(np.around(h4))
# [1. 2. 2. 0. 5.]
print(np.around(h4,decimals=1))
# [1.1 1.6 2.4 0.4 4.6]

结尾:

以上就是本篇博客的全部内容,方法都很简单,理解起来都没什么问题,就是比较零碎,感谢阅读。

【Numpy Pandas 数据分析】专栏

该专栏着重介绍Python的科学计算、数据分析 NumPy 与 Pandas 模块的使用方法,并会结合统计学概念及数据分析相关方法对一些案例进行分析。

感兴趣的朋友,可以点个 关注收藏 。如在博客中遇到任何问题或有一些想法、需求,可留言或私信。

创作不易,你的支持是我最大的动力,感谢 !

本文地址:https://blog.csdn.net/zhouz92/article/details/107498733

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网