我想提交一个列表作为多维numpy数组的一组坐标,而不必分别输入每个坐标。我知道元组是可能的。为什么不选择列表?
import numpy as np
qn=np.random.choice(list(range(100)), 64).reshape(4, 4, 4)
NS=[1,0,0]
print(qn[1,0,0])
#7
print(qn[NS])
#7 #Would be what I've been looking for
#I also tried
print(qn[iter(NS)])
答案 0 :(得分:0)
如果我正确理解(例如,您希望以编程方式从qn
获得单个元素),那么您要做的就是使用tuple
而不是list
。
请注意,切片和列表描述虽然使用相同的方括号符号[
和]
,但执行的操作却大不相同:
item[1]
访问对象的一部分(取决于实际对象)。[1, 2]
生成一个列表,其中包含指定的元素。因此,在您的示例中,NS
不能用作1, 0, 0
(它是tuple
)的替代,但是必须明确确保NS
是{ {1}}(最终具有与以前相同的内容)将达到目的。
tuple
如果import numpy as np
np.random.seed(0)
# FYI, no need to "cast" `range()` to `list`
qn = np.random.choice(range(100), 64).reshape(4, 4, 4)
NS = 1, 0, 0
# equivalent to: `NS = (1, 0, 0)`
# equivalent to: `NS = tuple(1, 0, 0)`
# equivalent to: `NS = tuple([1, 0, 0])` (this is doing a bit more, but the result is equivalent)
# this is different from: `NS = [1, 0, 0]`
print(qn[NS])
# 39
是通过其他方式生成的NS
,那么您要做的就是事先转换为list
。
tuple
这是NumPy的sophisticated indexing system的一部分。