以下是一段代码,它给出了我所期望的不同答案。第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)]
答案 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)
答案 3 :(得分:0)
你说:
我希望行:print random_array [list [x])返回 数组中该元素的值
但是你的代码不包含这样的代码。我希望这是你问题的原因。