Mar*_*tiz 54 python arrays indexing numpy indexof
在Python中,我们可以使用.index()获取数组中值的索引.我怎么能用NumPy数组做到这一点?
当我尝试做的时候
decoding.index(i)
Run Code Online (Sandbox Code Playgroud)
它说NumPy库不支持这个功能.有办法吗?
Sau*_*tro 89
使用np.where来获得,其中一个给定的条件是指数True.
例子:
对于2D np.ndarray调用a:
i, j = np.where(a == value)
Run Code Online (Sandbox Code Playgroud)
对于1D阵列:
i, = np.where(a == value)
Run Code Online (Sandbox Code Playgroud)
这对于像条件的作品>=,<=,!=等等...
您还可以np.ndarray使用index()方法创建子类:
class myarray(np.ndarray):
def __new__(cls, *args, **kwargs):
return np.array(*args, **kwargs).view(myarray)
def index(self, value):
return np.where(self == value)
Run Code Online (Sandbox Code Playgroud)
测试:
a = myarray([1,2,3,4,4,4,5,6,4,4,4])
a.index(4)
#(array([ 3, 4, 5, 8, 9, 10]),)
Run Code Online (Sandbox Code Playgroud)
Sta*_*ham 16
您可以将numpy数组转换为list并获取其索引.
例如
tmp = [1,2,3,4,5] #python list
a = numpy.array(tmp) #numpy array
i = list(a).index(2) # i will return index of 2, which is 1
Run Code Online (Sandbox Code Playgroud)
我就是你想要的.
我在这两种实现NumPy数组索引的方法之间徘徊:
idx = list(classes).index(var)
idx = np.where(classes == var)
Run Code Online (Sandbox Code Playgroud)
两者都采用相同数量的字符,但第一种方法返回的是一个int而不是一个numpy.ndarray.
使用numpy_indexed库可以有效地解决这个问题(免责声明:我是它的作者);这是为了解决此类问题而创建的。npi.indices 可以看作是 list.index 的 n 维泛化。它将作用于 nd-arrays(沿着指定的轴);并且还将以矢量化的方式查找多个条目,而不是一次查找单个项目。
a = np.random.rand(50, 60, 70)
i = np.random.randint(0, len(a), 40)
b = a[i]
import numpy_indexed as npi
assert all(i == npi.indices(a, b))
Run Code Online (Sandbox Code Playgroud)
该解决方案比之前发布的任何答案具有更好的时间复杂度(最坏情况下为 n log n),并且是完全矢量化的。
小智 5
您可以使用函数numpy.nonzero()或nonzero()数组的方法
import numpy as np
A = np.array([[2,4],
[6,2]])
index= np.nonzero(A>1)
OR
(A>1).nonzero()
Run Code Online (Sandbox Code Playgroud)
输出:
(array([0, 1]), array([1, 0]))
Run Code Online (Sandbox Code Playgroud)
输出中的第一个数组描述行索引,第二个数组描述相应的列索引。