Python 如何引用numpy数组的切片/视图

Python 如何引用numpy数组的切片/视图,python,arrays,numpy,slice,Python,Arrays,Numpy,Slice,我给出的答案向我提出了一个问题:是否可以引用numpy数组的视图或切片而不重复一堆括号 例如,在回答中,我使用了s=np.argsort(u),然后对“虚拟”排序的u[s]进行了所有计算。我曾经遇到过这样的情况,我需要该数组的布尔掩码,给出类似于u[s][mask]的东西。对于更大的数据,我可能有一个面具的面具的面具。直到事情开始看起来像史酷比的结局 但如果我将该数组赋给一个变量b=a[s][mask]并更改b,a不会更改,因此在计算过程中我会带上一堆括号。我尝试了各种各样的排列方式uv=u.v

我给出的答案向我提出了一个问题:是否可以引用numpy数组的视图或切片而不重复一堆括号

例如,在回答中,我使用了
s=np.argsort(u)
,然后对“虚拟”排序的
u[s]
进行了所有计算。我曾经遇到过这样的情况,我需要该数组的布尔掩码,给出类似于
u[s][mask]
的东西。对于更大的数据,我可能有一个面具的面具的面具。直到事情开始看起来像史酷比的结局


但如果我将该数组赋给一个变量
b=a[s][mask]
并更改
b
a
不会更改,因此在计算过程中我会带上一堆括号。我尝试了各种各样的排列方式
uv=u.view()[s]
,但似乎
.view()
只能查看整个阵列。我还缺少另一种方法吗?

您可能无法解决
u[s]
的简单情况,但在更复杂的情况下,如
u[s][mask]
您可以:

t = s[mask]
u[t] # same as u[s][mask]

也就是说,您可以将掩码简化为单个变量,但您可能无法完全摆脱它,除非您想使用
\uuuu getitem\uuuuuuuuuu
\uuuuuuu setitem\uuuuuuuu

编写自己的包装类,问题是
[mask]
。由于它使数组的任意子集
成为一个
,因此它总是返回一个新数组,而不是一个视图。一开始你能避免做面具吗?但如果我只有面具?我想我可以做
t=np.index(u.shape)[mask1][mask2][mask3]
。我假设它最终也是一个问题,
pandas
在某种抽象层上,如果没有类似
.loc
的东西,就很难区分切片和副本differentiate@DanielForsman:是的。在你的问题中,你提到了
s=np.argsort(u)
,它不是一个掩码,而是一个索引数组。我是根据这个假设工作的。如果你有很多遮罩,你可以合成它们,只需在原始阵列上使用合成版本。