元组作为多维数组中的索引以及切片
tuple as index in multidimensional array together with slicing
我有一个 3 维数组 A
,我需要通过元组 x=[1,1]
访问 A[:,1,1]
。
像这样:
x = [1,1]
A[:,*x]
但是,这样做时出现语法错误。我希望能够使用变量 x
访问 A[:,1,1]
的元素,我该怎么做?
谢谢!
第二个问题:
如何做同样的事情,而不是切片 :
用布尔数组来做。例如,如果 t
是布尔数组,则获得 A[t, *x]
你可以用slice(None)
代替:
,所以
y = tuple([slice[None]] + x)
A[y]
正是您所需要的。
您可以执行以下操作:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
print(A)
x = [1, 1]
print(A[(slice(None), *x)])
您可以使用 slice(None)
而不是 :
来构建切片元组。元组环境允许使用 * 运算符解包值。
输出:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]]
[3 9]
验证是否匹配:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
x = [1, 1]
s = (slice(None), *x)
print(np.allclose(A[s], A[:, 1, 1])) # True
*这是对此处找到的答案的修改:Slicing a numpy array along a dynamically specified axis
编辑以反映对问题和评论的编辑:
澄清一下,您可以在元组环境中解压 任何 可迭代对象。 * 运算符在元组中正常运行 。随心所欲地订购您的元素。混合不同的迭代器、类型、slice(None)
,无论你想如何构建你的切片,只要你最终得到一个有效的值序列,它就会按预期运行。
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
t = [True, False]
x = [1, 1]
print(np.allclose(A[(*t, *x)], A[True, False, 1, 1])) # True
您还可以在元组中添加完整列表:
print(np.allclose(A[(t, *x)], A[[True, False], 1, 1])) # True
我有一个 3 维数组 A
,我需要通过元组 x=[1,1]
访问 A[:,1,1]
。
像这样:
x = [1,1]
A[:,*x]
但是,这样做时出现语法错误。我希望能够使用变量 x
访问 A[:,1,1]
的元素,我该怎么做?
谢谢!
第二个问题:
如何做同样的事情,而不是切片 :
用布尔数组来做。例如,如果 t
是布尔数组,则获得 A[t, *x]
你可以用slice(None)
代替:
,所以
y = tuple([slice[None]] + x)
A[y]
正是您所需要的。
您可以执行以下操作:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
print(A)
x = [1, 1]
print(A[(slice(None), *x)])
您可以使用 slice(None)
而不是 :
来构建切片元组。元组环境允许使用 * 运算符解包值。
输出:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]]
[3 9]
验证是否匹配:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
x = [1, 1]
s = (slice(None), *x)
print(np.allclose(A[s], A[:, 1, 1])) # True
*这是对此处找到的答案的修改:Slicing a numpy array along a dynamically specified axis
编辑以反映对问题和评论的编辑:
澄清一下,您可以在元组环境中解压 任何 可迭代对象。 * 运算符在元组中正常运行 。随心所欲地订购您的元素。混合不同的迭代器、类型、slice(None)
,无论你想如何构建你的切片,只要你最终得到一个有效的值序列,它就会按预期运行。
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
t = [True, False]
x = [1, 1]
print(np.allclose(A[(*t, *x)], A[True, False, 1, 1])) # True
您还可以在元组中添加完整列表:
print(np.allclose(A[(t, *x)], A[[True, False], 1, 1])) # True