Python:为什么如何/ where / where np.where

时间:2017-06-14 03:10:19

标签: numpy where

我看到讨论numpy的'where'功能到处都有,但我还是不明白。

我有数千个(x,y,z)向量的数组/列表(x,y和z,介于-1和1之间)我需要那些向量,例如,y是< .25,z> 0.90。而x不是== 0.

你会怎么做?

2 个答案:

答案 0 :(得分:1)

np.where有两种用法,一种用于1参数,另一种用于3.听起来你对1参数情况感兴趣,这只是np.nonzero的另一个名称。 / p>

你提到vectors,所以我假设你对1d数组感兴趣,而不是2d或更高的稍微复杂的情况。

以下是两个基本示例:

In [320]: np.where([1, 0, .2, 3, .222, 0])
Out[320]: (array([0, 2, 3, 4], dtype=int32),)

请注意,缺少1和5 - 这些是0的索引。

In [321]: np.nonzero([True, False, False, True])
Out[321]: (array([0, 3], dtype=int32),)

0和3是2个真值的索引。

涉及where的{​​{1}}或nonzero会减少查找该逻辑表达式的True值的索引,

y is < .25, z > .90. and x is not == 0

因此,如果您想知道(y < .25) & (z > .90) & (x != 0) 正在做什么,请首先查看where/nonzero表达式的真/假值。它所做的只是告诉我们condition表达式是真的。

where

现在正在处理数千个向量&#39;变得更加复杂。那些&#39;载体&#39;独立的,还是他们排的&#39; 2d阵列还是什么?

答案 1 :(得分:0)

数据如下(示例):

['17:54:03:421801', -0.714, 0.0114, 0.196]
['17:54:03:438803', 0.312, -0.0244, 0.312]
['17:54:03:444301', 0.137, -0.263, 0.908]
[...etc...]

时间戳不是真正的主要问题,但需要保留。一个小文件可能是10,000'行',每天有多个文件。所以,我需要'where'的指数,比方说,y是&lt; .25和z> 0.90。和x!= 0。

或者更一般地说:a1和a2以及a3。

应如何处理这个问题?怎么会这样做?时间比内存使用更重要。我想用Python做这个,但我应该跳到c,我的母语?

线索?思考?建议?