Python - 切片数组直到满足特定条件

标签 python arrays numpy slice

我需要根据给定的索引对数组进行切片,直到满足特定条件。

>>> a = numpy.zeros((10), dtype='|S1')
>>> a[2] = 'A'
>>> a[4] = 'X'
>>> a[8] = 'B'
>>> a
array(['', '', 'A', '', 'X', '', '', '', 'B', ''], dtype='|S1')

例如,对于上面的数组,我想要一个从给定索引到两个方向上第一个非零值的子集。例如,对于索引值 2、4、8,结果将是:

['', '', A, '']      # 2
['', X, '', '', '']  # 4
['', '', '', B, '']  # 8

关于使用 numpy API 执行此操作的最简单方法有什么建议吗?学习 python 和 numpy,将不胜感激。谢谢!

最佳答案

如果您这样设置问题:

import numpy
a = numpy.zeros((10), dtype=str)
a[2] = 'A'
a[4] = 'X'
a[8] = 'B'

您可以像这样轻松获取非空字符串的索引:

i = numpy.where(a!='')[0]  # array([2, 4, 8])

或者,numpy.argwhere(..) 也能很好地工作。

然后你可以使用这个数组切片:

out2 = a[:i[1]]        # 2   ['' '' 'A' '']
out4 = a[i[0]+1:i[2]]  # 4   ['' 'X' '' '' '']

等等

关于Python - 切片数组直到满足特定条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216260/

相关文章:

python - ‘QString’对象不支持项目分配python

python - 如何使用python中的where子句从firestore中的数组中删除元素

python - 循环 numpy 数组时返回具有相同维度的子数组

python - 使用参数 stop_words 时 scikit 学习 TfidfVectorizer 时出错

python - OOP:设计这个对象的最佳方法是什么?

Python 可继承函数

arrays - Swift - 初始化和附加到字典中的数组的问题

arrays - 如何将已排序的表索引作为字符串返回?

Numpy 在 windows 和 unix 上返回不同的结果

numpy - 创建 A.T * diag(b) * A + C 形式的稀疏矩阵的最快方法?