修剪numpy数组:什么是最好的方法?

时间:2016-05-06 00:54:28

标签: python arrays numpy trim

请考虑以下代码:

a = np.arange (1,6)
b = np.array(["A", "B", "C", "D", "E"])
c = np.arange (21, 26)

a,b,c =   a[a> 3],b[a>3], c[a >3]
print a,b,c

输出为:[4 5] ['D''E'] [24 25]

我无法弄清楚为什么这个输出与以下内容不同:

a = np.arange (1,6)
b = np.array(["A", "B", "C", "D", "E"])
c = np.arange (21, 26)

a = a[a>3]
b = b[a>3]
c = c[a>3]
print a,b,c

输出:     [4 5] ['A''B'] [21 22]

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在第一部分中,当你这样做时:

a, b, c = a[a> 3], b[a>3], c[a >3]

通过a = np.arange (1,6)完成 - 只有在执行完所有操作后才会修改a的值。

而在第二部分中,您正在对已经过滤并修改过的b进行过滤carray a,因为它在您完成后发生:

a = a[a>3]

因此,对阵列a过滤以下行,现在等于[4, 5]

b = b[a>3]  # <-- over a = [4, 5] gives values at index 0 and 1
c = c[a>3]  # <-- over a = [4, 5] gives values at index 0 and 1

在第二种情况下,您可以使用临时数组来保存a的过滤值。

temp = a[a>3]
b = b[a>3]
c = c[a>3]
a = temp

或者,正如@hpaulj的评论中所建议的,首先评估并将掩码存储在变量中,然后根据需要多次使用它而不必重做工作:

mask = a > 3 
a = a[mask]
b = b[mask]
c = c[~mask]

答案 1 :(得分:0)

一个简单的解决方法是最后而不是先修剪“ a”数组

b=b[a>3]
c=c[a>3]
a=a[a>3]

如果您打算执行多个修整,请考虑将[a> 3]临时保存到变量中(按照其他答案的指示),这可能有助于提高计算效率。