Numpy切片——用列表指定所需行
在本文中,我们将介绍如何使用Python的Numpy库中的切片方法,通过指定想要的行来切片一个数组。
阅读更多:Numpy 教程
什么是Numpy切片
在Numpy中,切片是指根据一组选定的行与列来获取数组的子集。和Python中的切片一样,Numpy切片也采用[start:stop:step]的形式。
针对Numpy的2D数组,我们可以使用“,”来区分行和列。比如:
import numpy as np
a = np.array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]])
print("原始数组:")
print(a)
print("切片后的子集:")
print(a[:2, 1:])
上述代码中,我们首先定义了一个3×3的数组a,然后使用a[:2, 1:]切片出数组的第1、2行和第2、3列,输出结果为:
原始数组:
[[1 2 3]
[4 5 6]
[7 8 9]]
切片后的子集:
[[2 3]
[5 6]]
Numpy切片中用列表指定所需行
现在,我们来看看如何使用列表来指定我们需要的行。
首先,我们需要定义一个列表,包含我们希望选取的行的索引。比如,如果我们需要选取数组的第1、3行,则定义的列表形如indexes = [0, 2]。
我们可以使用np.take()函数,将定义好的列表传递给need_rows这个参数:
import numpy as np
a = np.array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]])
indexes = [0, 2]
print("切片前的数组:")
print(a)
print("切片后的子集:")
print(np.take(a, indexes, axis=0))
上述代码中,我们定义了一个3×3的数组a,然后定义了一个包含需要选取的行索引的列表indexes。我们使用np.take()函数将a中的indexes指定的行切片出来,最终输出结果为:
切片前的数组:
[[1 2 3]
[4 5 6]
[7 8 9]]
切片后的子集:
[[1 2 3]
[7 8 9]]
这样,在一个大的数组中,我们只需指定需要选取的行的索引,就可以将其切片出来。
Numpy切片中排除部分行
除了上述方法,我们还可以使用np.delete()函数,从原数组中去除我们不需要的行。
import numpy as np
a = np.array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]])
excluded_rows = [1]
print("切片前的数组:")
print(a)
print("切片后的子集:")
print(np.delete(a, excluded_rows, axis=0))
在上述代码中,我们定义了一个3×3的数组a,然后定义了一个包含需要去除的行索引的列表excluded_rows。我们使用np.delete()函数将a中的excluded_rows指定的行排除,最终输出结果为:
切片前的数组:
[[1 2 3]
[4 5 6]
[7 8 9]]
切片后的子集:
[[1 2 3]
[7 8 9]]
总结
Numpy的切片方法无疑极大地提升了程序的可读性和效率。在处理大规模的数据数组时,只需使用非常简单的代码,就可以快速地选取需要的行和列,或将不需要的行和列排除,提高计算效率。除了本文中介绍的方法,Numpy还有许多其他的高效处理数据的方法,读者可进一步探索。
极客教程