Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带索引元组的Python切片numpy数组_Python_Arrays_Numpy_Indexing_Tuples - Fatal编程技术网

带索引元组的Python切片numpy数组

带索引元组的Python切片numpy数组,python,arrays,numpy,indexing,tuples,Python,Arrays,Numpy,Indexing,Tuples,我想使用N-1维索引元组b切片一个N维numpy数组a。以下是N=4的情况: import numpy as np a = np.random.rand(20,1,5,4) b1 = (0,0,0) b2 = (0,3,2) # want to get the slice c = a[:,b2[0],b2[1],b2[2]] without explicitly writing all N-1 elements of b2 c = a[:,b1] # no error message, b

我想使用N-1维索引元组
b
切片一个N维numpy数组
a
。以下是N=4的情况:

import numpy as np

a = np.random.rand(20,1,5,4)
b1 = (0,0,0)
b2 = (0,3,2)

# want to get the slice c = a[:,b2[0],b2[1],b2[2]] without explicitly writing all N-1 elements of b2

c = a[:,b1] # no error message, but gives a[:,[b1[0],b1[1],b1[2]],:,:]
c = a[:,b2] # error message (because b2[1] = 3 larger than a.shape[1])
将元组索引元素“解包”到不同维度的正确方法是什么?我尝试使用星号操作符(
*b
),但似乎没有效果。

a[(…,*b1)]
这归结为使用索引元组中的变量参数手动调用
\uuuu getitem\uuu
方法:

[23]中的
:a.。uu getitem_uuu((…,*b1))
出[23]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])
在[21]中:a[:,0,0,0]
出[21]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])
请注意,省略号(
)的用法具有稍微更一般的含义。否则,您必须手动构造
切片:

[20]中的
:a.。uuu getitem_uuuuuuuu((片(无),*b1))
出[20]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])
a[(…,*b1)]
这归结为使用索引元组中的变量参数手动调用
\uuuu getitem\uuu
方法:

[23]中的
:a.。uu getitem_uuu((…,*b1))
出[23]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])
在[21]中:a[:,0,0,0]
出[21]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])
请注意,省略号(
)的用法具有稍微更一般的含义。否则,您必须手动构造
切片:

[20]中的
:a.。uuu getitem_uuuuuuuu((片(无),*b1))
出[20]:
阵列([0.93049554,0.63858628,0.31665933,0.15048072,0.17083849,
0.34621308, 0.66980288, 0.75191251, 0.05844084, 0.16715787,
0.80409005, 0.64181912, 0.76463963, 0.75616746, 0.44955961,
0.19034925, 0.8841084 , 0.54450091, 0.02033021, 0.21275405])

这和做
a[(切片(无),*b1)]没什么区别。
嗯,那好多了。我总是忘记
\uuu getitem\uuu
的细节。。。回答吧!(或者更确切地说,我觉得Julia约定更直观,其中
getindex
接受所有维度的vararg,并且
本身就是一个对象。)不,这都是你的。实际上我想的是,高级索引需要每个维度都有元组,这比这里的要麻烦得多。在每个轴上有一个元素的情况下,它会减少到您得到的值。@bproxauf这不是Python,而是Numpy的
\uuuu getitem\uuuu
实现。他们在类型和内容上做了一些花哨的报道。但您确实得到了一个警告:不推荐使用非元组序列进行多维索引;使用
arr[tuple(seq)]
代替
arr[seq]
。在未来,这将被解释为数组索引,
arr[np.array(seq)]
,这将导致错误或不同的结果。这与执行
a[(片(无),*b1)]
没有什么不同,这更好。我总是忘记
\uuu getitem\uuu
的细节。。。回答吧!(或者更确切地说,我觉得Julia约定更直观,其中
getindex
接受所有维度的vararg,并且
本身就是一个对象。)不,这都是你的。实际上我想的是,高级索引需要每个维度都有元组,这比这里的要麻烦得多。在每个轴上有一个元素的情况下,它会减少到您得到的值。@bproxauf这不是Python,而是Numpy的
\uuuu getitem\uuuu
实现。他们在类型和内容上做了一些花哨的报道。但您确实得到了一个警告:不推荐使用非元组序列进行多维索引;使用
arr[tuple(seq)]
代替
arr[seq]
。在将来,这将被解释为数组索引,
arr[np.array(seq)]
,这将导致错误或不同的结果。