Python 使用itertools为数组编制索引

Python 使用itertools为数组编制索引,python,numpy,itertools,Python,Numpy,Itertools,下面是一段代码,它给了我一个与我所期望的不同的答案。行:print listx符合我的期望。我希望:print random_array[listx]行返回数组中该元素的值,但它返回三个数组。例如,如果listx返回[9,8,7],则将打印随机数组[9,:,:],随机数组[8,:,:],随机数组[7,:,:]。有人能给我解释一下为什么会这样吗?我怎样才能得到预期的答案 import numpy as np import itertools random_array = np.random.ra

下面是一段代码,它给了我一个与我所期望的不同的答案。行:print listx符合我的期望。我希望:print random_array[listx]行返回数组中该元素的值,但它返回三个数组。例如,如果listx返回[9,8,7],则将打印随机数组[9,:,:],随机数组[8,:,:],随机数组[7,:,:]。有人能给我解释一下为什么会这样吗?我怎样才能得到预期的答案

import numpy as np
import itertools

random_array = np.random.randint(0, 9, (10, 10, 10))
my_iterator = itertools.product(range(10),range(10),range(10))

for x in my_iterator:
    print list(x)
    print random_array[list(x)]
你说:

我希望:print random_array[list[x]行返回 数组中该元素的值

但是您的代码不包含这样一行。我想这就是问题的原因。

您说:

我希望:print random_array[list[x]行返回 数组中该元素的值


但是您的代码不包含这样的行。我想这就是问题的原因。

您传递的是列表而不是元组:

# What you are doing
random_array[[2, 3, 3]]  # semantics: [arr[2], arr[3], arr[3]]

# What you want to be doing
random_array[(2, 3, 3)]  # semantics: arr[2][3][3], same as arr[2,3,3]

简而言之:不要使用list将元组强制转换为列表…

您传递的是列表而不是元组:

# What you are doing
random_array[[2, 3, 3]]  # semantics: [arr[2], arr[3], arr[3]]

# What you want to be doing
random_array[(2, 3, 3)]  # semantics: arr[2][3][3], same as arr[2,3,3]

简而言之:不要使用list将元组强制转换为列表…

我认为您需要的是:

print random_array[x[0], x[1], x[2]]
如果将列表作为索引传递给numpy,它将通过索引列表进行迭代,并获取该元素片段。例如:

>>> test = numpy.array(range(10))
>>> idx = [1, 2, 3]
>>> test[idx]
array([1, 2, 3])

我想你想要的是:

print random_array[x[0], x[1], x[2]]
如果将列表作为索引传递给numpy,它将通过索引列表进行迭代,并获取该元素片段。例如:

>>> test = numpy.array(range(10))
>>> idx = [1, 2, 3]
>>> test[idx]
array([1, 2, 3])
怎么样

print random_array[x]
当你通过一个列表时,它正在发生,这不是你想要的。

怎么样

print random_array[x]


当你传递一个列表时,它正在发生,这不是你想要的。

别再做这样的挂件了。很明显,他指的是他摘录的最后一行。是的,那是一个打字错误。我的意思是我希望看到这一行:print random_array[listx]我已经对问题进行了相应的编辑。@davidkenp:告诉你的python解释器。我想Marcin有一点。精度在各个方面都很重要。别再这样吊儿郎当了。很明显,他指的是摘录的最后一行。是的,那是一个拼写错误。我的意思是我希望看到这一行:print random_array[listx]我已经相应地编辑了这个问题。@DavidKemp:告诉你的python解释器。我想Marcin有一点。精度在各个方面都很重要。我看到我传递的是一个列表,而不是我的切片。那么:random_array[[2,3,3]]你能像random_array[*2,3,3]那样展开元组吗@Marcin:这正是我正在测试的内容我相信这个答案比选择的答案解释得更多。如果有人想了解更多有关numpy索引的信息,这里有一些文档。我看到我传递的是一个列表,而不是我的切片。所以:random_array[[2,3,3]]你能像random_array[*2,3,3]那样展开元组吗@Marcin:这正是我在测试的过程。我相信这个答案比选择的答案解释得更多。如果有人想知道更多关于numpy索引的信息,这里有一些文档。我已经结束了我的答案。numpy确实支持随机数组[2,3,3]它支持它,但不做OP期望的事情。重新打开我的答案;算出答案。我已关闭我的答案。Numpy确实支持随机数组[2,3,3]。它支持它,但不做OP期望的事情。重新打开我的答案;算出答案。