<p>似乎在调用<code>ApEn._phi()</code>函数时,<code>N</code>和<code>m</code>的特定值可能最终返回一个<code>0</code>。然后需要将其提升到-1的负幂,但这是未定义的(另请参见<a href="https://math.stackexchange.com/questions/1009868/why-does-zero-raised-to-the-power-of-negative-one-equal-infinity">Why does zero raised to the power of negative one equal infinity?</a>)</p>
<p>为了举例说明,我尝试专门复制您的场景,在<code>transform</code>操作的第一次迭代中,会发生以下情况:</p>
<pre><code>U is: 1 0
2 48
</code></pre>
<p>(第一个groupby有2个元素)</p>
<pre><code>N is: 2
m is: 3
</code></pre>
<p>因此,当您得到<code>_phi()</code>的返回值时,实际上是在执行<code>(N - m + 1.0)**-1 = (2 - 3 + 1)**-1 = 0**-1</code>,这是未定义的。也许这里的关键是,你说你是按单个方向分组的,并将<code>U</code>数组传递到近似熵函数中,但是你是按<code>diff_X</code>和<code>diff_Y</code>分组的,由于所应用方法的性质,这会导致非常小的分组。据我所知,如果你想计算每个方向的近似熵,你只需要按“方向”分组:</p>
<pre><code>def Entropy(df):
'''
Calculate entropy for individual direction
'''
# Calculate ApEn grouped by direction.
df['ApEn_X'] = df.groupby('Direction')['X'].transform(ApEn)
df['ApEn_Y'] = df.groupby('Direction')['Y'].transform(ApEn)
return df
</code></pre>
<p>这将产生如下数据帧:</p>
<pre><code>entropy.head()
Time Direction X Y ApEn_X ApEn_Y
0 1 Left 28 47 0.035091 0.035091
1 2 Up 8 47 0.013493 0.046520
2 3 Up 0 32 0.013493 0.046520
3 4 Right 34 8 0.044452 0.044452
4 5 Right 49 27 0.044452 0.044452
</code></pre>