使用itertools索引数组

时间:2012-02-24 14:28:20

标签: python numpy itertools

以下是一段代码,它给出了我所期望的不同答案。第print list(x)行符合我的预期。我希望行:print random_array[list(x)]返回数组中该元素的值,但它返回三个数组。如果例如list(x)返回[9, 8, 7],则会打印random_array[9, :, :], random_array[8, :, :], random_array[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)]

4 个答案:

答案 0 :(得分:3)

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

# 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(...)将元组转换为列表。

答案 1 :(得分:1)

我认为你想要的是:

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])

答案 2 :(得分:1)

怎么样

print random_array[x]

当您传递列表时,advanced indexing正在发生,这不是您想要的。

答案 3 :(得分:0)

你说:

  

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

但是你的代码不包含这样的代码。我希望这是你问题的原因。