【问题标题】:How to find two consecutive positive-negative values in an array?如何在数组中找到两个连续的正负值?
【发布时间】:2016-05-18 15:05:11
【问题描述】:

我有以下数组:

X
array([ 3.5, -3, 5.4, 3.7, 14.9, -7.8, -3.5, 2.1])

对于X 的每个值,我知道它的记录时间T。我想找到两个连续的正负之间的索引,反之亦然。最后我想要一个像

这样的数组
Y = array([ T(1)-T(0), T(2)-T(1),  T(5)-T(4), T(7)-T(6)])

【问题讨论】:

  • 连续元素之间没有任何内容。我不知道你在问什么。
  • 成对取它们,然后在符号上过滤 XOR。
  • 到目前为止我试过tmp = np.sign(x[0]) l = list() for i in range(1,len(x)): if (np.sign(x[i]) + tmp)==0: tmp = np.sign(x[i]) deltat = T[i]-T[i-1] l.append(deltat / np.timedelta64(1, 's'))

标签: python arrays algorithm sign


【解决方案1】:

也许在列表推导中迭代数组对你有用:

In [35]: x=np.array([ 3.5, -3, 5.4, 3.7, 14.9, -7.8, -3.5, 2.1])

In [36]: y=np.array([b-a for a,b in zip(x, x[1:]) if (a<0) != (b<0)])

In [37]: y
Out[37]: array([ -6.5,   8.4, -22.7,   5.6])

编辑

我显然没有完全理解这个问题。试试这个:

In [38]: X=np.array([ 3.5, -3, 5.4, 3.7, 14.9, -7.8, -3.5, 2.1])

In [39]: T=np.array([ 0, 0.1, 2, 3.5, 5, 22, 25, 50])

In [40]: y=np.array([t1-t0 for x0,x1,t0,t1 in zip(X, X[1:], T, T[1:]) if (x0<0) != (x1<0)])

In [41]: y
Out[41]: array([  0.1,   1.9,  17. ,  25. ])

【讨论】:

  • 很好:但是时间存储在另一个数组中。我怎样才能做到另一个数组中相应时间的差异?
  • 啊,我误会了。正确答案马上出现。
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2018-12-16
  • 2015-11-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多