如何在一个数组中查找另一个数组的索引

5

我已经按照下面的方式创建了一个数组,它表示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)) 

我不确定为什么索引函数不起作用,也找不到解决方法。

我是新手程序员,请见谅如果这听起来有些无意义。

3个回答

8

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

R.tolist().index(x)

xR的第三个元素时,可以将数组转换为list,然后使用index函数来查找;)


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://dev59.com/cmkw5IYBdhLWcg3wQ4Zc#10016379)

这里是一个使用JavaScript的函数,可以将任何字符串转换为有效的HTML ID。它使用正则表达式替换所有非字母数字字符,并将其转换为“-”字符。
``` function toHtmlId(str) { return str.replace(/[^\w]/g,'-'); } ```
例如,如果你传递“Hello, World!”给这个函数,它会返回“Hello--World-”。

1
Numpy数组没有索引函数,这有很多原因。然而,我认为你想要的是不同的东西。
例如,你提到的代码:
v = []
for A in R:
    v.append(R.index(A))

假设R的行是唯一的,那么只需要:

v = range(len(R))

然而,我认为您可能需要内置函数enumerate。例如:

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数组的行为与列表非常不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接