我需要编辑一个数组。该数组有两列。一列用于X值,另一列用于Y值。X值为0.0025步长(0、0.0025、0.005等),但有时会出现错误的步长,我需要删除这些步长。其他人建议我使用以下步长:
data = data[~np.r_[True, (np.diff(data[:,0])>0)&(np.diff(data[:, 0])<0.0024)]]
问题是第一个值总是被删除,第二个问题是它不只是删 debugging 误的步骤,但在它之后的一个太.
vxf3dgd41#
第一个元素总是被删除的原因是因为你反转了np.r_的输出,它把True前置到np.diff的输出。当使用~时,它变成了False,因此第一个元素被删除。我猜想后面的步骤也被删除了,因为np.diff检查连续元素之间的差异。
np.r_
True
np.diff
~
False
0.0025, 0.005, 0.008, 0.01, 0.0125 ~~~~~ # The diff here is going to look like: 0.0025, 0.003, 0.002, 0.0025
请注意错误的元素如何导致该元素之前和之后的错误diff。如果这是意外行为,则不应使用np.diff,而是直接使用np.arange与预期步骤进行比较
np.arange
import numpy as np # Solution: data[ np.isclose(data[:, 0], np.arange(start, stop, 0.0025)) ] # with I'm guessing start=0, and stop=data.shape[0]*0.0025
1条答案
按热度按时间vxf3dgd41#
第一个元素总是被删除的原因是因为你反转了
np.r_
的输出,它把True
前置到np.diff
的输出。当使用~
时,它变成了False
,因此第一个元素被删除。我猜想后面的步骤也被删除了,因为np.diff检查连续元素之间的差异。
请注意错误的元素如何导致该元素之前和之后的错误diff。
如果这是意外行为,则不应使用
np.diff
,而是直接使用np.arange
与预期步骤进行比较