如何在数组中查找数组的索引

2024-05-18 15:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经按照下面所示的方式创建了一个数组;它表示3对坐标。我的问题是我似乎找不到数组中某对坐标的索引。

import numpy as np

R = np.random.uniform(size=(3,2))

R

Out[5]: 
array([[ 0.57150157,  0.46611662],
   [ 0.37897719,  0.77653461],
   [ 0.73994281,  0.7816987 ]])

R.index([ 0.57150157,  0.46611662])

返回以下内容:

AttributeError: 'numpy.ndarray' object has no attribute 'index'

我这么做的原因是为了在for循环中扩展一个列表,其中包含一个坐标对的索引。

例如

v = []
for A in R:
v.append(R.index(A)) 

我只是不知道为什么索引函数不起作用,而且似乎找不到绕过它的方法。

我对编程还不熟悉,所以如果这看起来像是胡说八道的话,请原谅。


Tags: importnumpyforsizeindexasnp方式
3条回答

通过将内部数组(坐标)转换为元组,可以获得所需的结果。

R = map(lambda x: (x), R);

然后可以使用R.index((number1,number2))找到元组的索引

希望这有帮助!

[编辑]为了解释上面代码中发生的事情,map函数遍历(迭代)数组R中的项,并用lambda函数的返回结果替换每个项。 所以它就相当于这样的东西:

def someFunction(x):
  return (x)

for x in range(0, len(R)):
  R[x] = someFunction(R[x])

所以它把每一个项目都拿出来做点什么,把它放回列表中。我意识到它可能并没有像我想的那样做(返回(x)似乎没有将正则数组更改为元组),但它确实有助于解决您的问题,因为我认为通过遍历它,python可能会从numpy数组中创建一个正则数组。

要真正转换成元组,下面的代码应该可以工作

R = map(tuple, R) 

(给https://stackoverflow.com/a/10016379/2612012的学分)

index()list类型的方法,而不是numpy.array类型的方法。尝试:

R.tolist().index(x)

其中x是例如R的第三个条目。这首先将数组转换为list,然后可以使用index;)

Numpy数组不是索引函数,原因有很多。不过,我觉得你想要的是不同的东西。

例如,您提到的代码:

v = []
for A in R:
    v.append(R.index(A))

只是(假设R目前有唯一的行):

v = range(len(R))

但是,我认为您可能需要内置函数enumerate。E、 g

for i, row in enumerate(R):
    # Presumably you're doing something else with "row"...
    v.append(i)

例如,假设我们想知道每行的和大于1的印度。

一种方法是:

v = []
for i, row in enumerate(R)
    if sum(row) > 1:
        v.append(i)

但是,如果您使用的是numpy数组,numpy还提供了其他方法。例如,与上述代码等效的是:

v, = np.where(R.sum(axis=1) > 1)

如果您刚刚开始使用python,那么在过分担心使用numpy的最佳方式之前,请先重点理解第一个示例。请注意,numpy数组的行为与列表非常不同。

相关问题 更多 >

    热门问题