【问题标题】:How to find slice object in numpy array如何在numpy数组中找到切片对象
【发布时间】:2012-12-13 13:58:04
【问题描述】:

我有一个包含整数和切片对象的 numpy 数组,例如:

x = np.array([0,slice(None)])

如何检索整数或切片对象的(逻辑)索引?我试过np.isfinite(x)(产生错误)、np.isreal(x)(所有True)、np.isscalar(x)(不是元素方面的),都是徒劳的。 似乎可行的是

ind = x<np.Inf       # Out[1]: array([True, False], dtype=bool)

但我不愿意对数值完全任意的对象使用数值比较(并且将来可能会改变?)。有没有更好的解决方案来实现这一点?

【问题讨论】:

  • numpy 数组中的所有项目共享同一个dtype。如果您查看x.dtype,您会看到它是dtype('object')。因此,从矢量化类型检查的角度来看,它们都是相同的。你真的需要在同一个数组中混合不同的东西吗?稍微重构代码以利用 numpy 可能比让 numpy 按您的方式工作更容易。
  • @Jaime 实际上,数据存储为一个列表:[0,slice(None)];从这个列表中,我可以使用列表理解检索切片对象(或这些对象的索引),但我认为(错误)使用 numpy 数组会更快。事实上,这比列表理解快 4 倍,如果不是因为从列表到数组的转换慢了 10 倍...... :-( 所以,问题解决/回避:更好地使用列表理解。但是,对于同一个列表中的多个选择,数组方法可能仍然有效。无论如何,感谢您的输入!

标签: python arrays numpy find slice


【解决方案1】:

你可以这样做:

import numpy as np
checker = np.vectorize( lambda x: isinstance(x,slice) )
x = np.array([0,slice(None),slice(None),0,0,slice(None)])
checker(x)
#array([False,  True,  True, False, False,  True], dtype=bool)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多