【发布时间】: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