如何在NumPy中用字符串':'作为索引实现数组切片?
NumPy中用变量形式实现全量切片提取数据
从NumPy数组提取全部数据时,array[:]是最简单的切片方法,但在大型项目中,若希望索引能随数据格式自动变化,就需要用变量形式替代直接写:的硬编码方式。
示例场景
创建测试数组
>>> import numpy as np >>> a = np.random.randint(0,10,(5,5)) >>> a array([[3, 3, 3, 7, 2], [8, 6, 8, 6, 3], [4, 2, 2, 0, 3], [4, 0, 6, 0, 1], [1, 2, 0, 2, 8]])
传统硬编码切片
直接使用[:]可以提取全部数据:
>>> a[:] array([[3, 3, 3, 7, 2], [8, 6, 8, 6, 3], [4, 2, 2, 0, 3], [4, 0, 6, 0, 1], [1, 2, 0, 2, 8]])
错误的变量替代尝试
- 直接将字符串
":"赋值给变量会触发索引错误:
>>> b = ":" >>> a[b] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
- 尝试用
slice(':')构造切片对象同样报错,因为切片需要整数/None类型的参数:
>>> c = slice(':') >>> a[c] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: slice indices must be integers or None or have an __index__ method
可行的解决方案
使用NumPy提供的np.index_exp[:]来定义全切片索引变量,就能实现变量形式的全量数据提取:
>>> c = np.index_exp[:] >>> a[c] array([[3, 3, 3, 7, 2], [8, 6, 8, 6, 3], [4, 2, 2, 0, 3], [4, 0, 6, 0, 1], [1, 2, 0, 2, 8]])
内容的提问来源于stack exchange,提问作者sundar_ima
相关产品推荐
相关产品推荐

