我以下面显示的方式创建了一个数组;代表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))
我只是不确定为什么索引功能不起作用,似乎无法找到解决方法。
我是编程新手,请原谅我,如果这看起来像废话。
答案 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)
答案 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数组的行为与列表的行为非常不同。