1

这是一段代码,它给了我一个与我所期望的不同的答案。这条线: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

4 回答 4

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(...).

于 2012-02-24T14:38:50.020 回答
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])
于 2012-02-24T14:39:10.863 回答
1

怎么样

print random_array[x]

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

于 2012-02-24T14:46:45.063 回答
0

你说:

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

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

于 2012-02-24T14:32:34.997 回答