请考虑以下代码:
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]
有什么想法吗?
答案 0 :(得分:0)
在第一部分中,当你这样做时:
a, b, c = a[a> 3], b[a>3], c[a >3]
通过a = np.arange (1,6)
完成 - 只有在执行完所有操作后才会修改a
的值。
而在第二部分中,您正在对已经过滤并修改过的b
进行过滤c
和array 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]临时保存到变量中(按照其他答案的指示),这可能有助于提高计算效率。