2016-12-14 26 views
1

我给earlier的回答对我提出了一个问题:是否可以在不重复一堆括号的情况下引用numpy数组的视图或切片?如何引用numpy数组的切片/视图

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

但是,如果我将该数组分配给一个变量b=a[s][mask]并更改b,a不会改变,所以我最终在我的计算中携带了一堆括号。我已经尝试过uv=u.view()[s]的各种安排,但似乎.view()只能看到整个阵列。我还缺少另一种方法吗?

+0

问题是'[mask]'。由于它构成数组“a”的任意子集,它总是返回一个新数组,而不是一个视图。你能避免在第一时间制作面具吗? –

回答

1

你可能不能够解决的u[s],但在更复杂的情况下,像u[s][mask]简单的情况下,您可以:

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

也就是说,你可以简化你的面具,以一个单一的变量,但你可能不能够完全摆脱它,除非你想写你自己的包装类__getitem____setitem__

+1

但是如果我只有口罩?我想我可以做't = np.indices(u.shape)[mask1] [mask2] [mask3]'。我认为它最终会出现同样的问题'pandas'有一些抽象层,它很难区分片和复制之间没有'.loc'来区分 –

+0

@DanielForsman:是的。在你的问题中,你提到了's = np.argsort(u)'这不是一个掩码,而是一系列索引。我从这个假设开始工作。如果你有很多的蒙版,你可以将它们组合起来,并使用原始数组上的组合版本。 –