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

时间:2014-01-31 19:00:55

标签: python arrays numpy

我以下面显示的方式创建了一个数组;代表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循环中扩展一个带有坐标对的索引的列表。

e.g。

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

我只是不确定为什么索引功能不起作用,似乎无法找到解决方法。

我是编程新手,请原谅我,如果这看起来像废话。

3 个答案:

答案 0 :(得分:6)

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

R.tolist().index(x)

x所在的位置,例如R的第三个条目。首先将您的数组转换为list,然后您可以使用index;)

答案 1 :(得分:2)

您可以通过将内部数组(坐标)转换为元组来实现所需的结果。

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

答案 2 :(得分:1)

由于多种原因,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数组的行为与列表的行为非常不同。