如何忽略 -inf 并移动到 for 循环中的下一次迭代
How to disregard -inf and move to next iteration in for loop
你好,我希望得到一些帮助,我是 python 的新手,我想要一些关于如何设置条件的建议,以便如果在我的数据中遇到 -inf,那么程序将循环到下一次迭代
import numpy as np
import math
import matplotlib.pylab as plt
import pandas as pd
from scipy.interpolate import interp1d
from scipy.signal import butter, filtfilt
from scipy import interpolate
Ic = 400
lower_Ig = 720 #the lower limit of the generator current Ig
Upper_Ig = 1040 #Upper limit
Ix=range(-60,61,1)
for j in range(40, 80, 10):
Var=(40000* j)/ 10000
#print Var
for c in range(lower_Ig, Upper_Ig+1, 40):
#print c
Names =['Vg','V3', 'V4']
Data = pd.read_csv('/Documents/JTL_'+str(Var)+'/Ig='+str(c)+'/Grey_Zone.csv', names=Names)
Vg = Data['Vg']
V3 = Data['V3']
V4 = Data ['V4']
Prf = V4 / Vg
#print Prf
C = 0.802
freq = 100
b, a = butter(2, (5/C)/(freq/2), btype = 'low')
yg = filtfilt(b, a, Vg) # filter with phase shift correction
y4 = filtfilt(b, a, V4) # filter with phase shift correction
SW = y4 / yg
if SW == np.nan: #I need a condition here that if -inf is encountered then the programme should loop to next c value in for loop
continue
f = interp1d( SW, Ix )
print f(0.25), f(0.5), f(0.75)
print f(0.75)-f(0.25)
我尝试使用不同的 numpy 函数,但我总是得到相同的错误
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我认为我不能使用 any()
或 all()
,因为那样只会包含所有数据,我想忽略 -inf。非常感谢任何帮助
您可以 filter
去除不需要的元素(例如 newlist=filter(lambda n: not numpy.isneginf(n), list_of_numbers)
),或者使用 numpy.nan_to_num(...)
.
转换为适当数字的列表
假设我们在循环的一次迭代中有 SW
,如下所示:
>>> import numpy as np
>>> SW = [np.inf, -np.inf, np.nan, 0, 1]
>>> np.isfinite(SW)
[False, False, False, True, True]
>>> all(np.isfinite(SW))
False # since one or more in the list is False
如果您想跳过任何包含 nan, inf, -inf
的 SW
,您可以使用
if not all(np.isfinite(SW)):
continue
如果 nan
不是问题,只有 -inf
是那么你可以使用
if any(np.isneginf(SW)):
continue
如果 SW
的任何元素是 -inf
将跳过迭代
请注意,您无法比较使用 ==
与 np.nan
的相等性
>>> x = np.nan
>>> x == np.nan
False
你使用 isnan
>>> np.isnan(x)
True
你好,我希望得到一些帮助,我是 python 的新手,我想要一些关于如何设置条件的建议,以便如果在我的数据中遇到 -inf,那么程序将循环到下一次迭代
import numpy as np
import math
import matplotlib.pylab as plt
import pandas as pd
from scipy.interpolate import interp1d
from scipy.signal import butter, filtfilt
from scipy import interpolate
Ic = 400
lower_Ig = 720 #the lower limit of the generator current Ig
Upper_Ig = 1040 #Upper limit
Ix=range(-60,61,1)
for j in range(40, 80, 10):
Var=(40000* j)/ 10000
#print Var
for c in range(lower_Ig, Upper_Ig+1, 40):
#print c
Names =['Vg','V3', 'V4']
Data = pd.read_csv('/Documents/JTL_'+str(Var)+'/Ig='+str(c)+'/Grey_Zone.csv', names=Names)
Vg = Data['Vg']
V3 = Data['V3']
V4 = Data ['V4']
Prf = V4 / Vg
#print Prf
C = 0.802
freq = 100
b, a = butter(2, (5/C)/(freq/2), btype = 'low')
yg = filtfilt(b, a, Vg) # filter with phase shift correction
y4 = filtfilt(b, a, V4) # filter with phase shift correction
SW = y4 / yg
if SW == np.nan: #I need a condition here that if -inf is encountered then the programme should loop to next c value in for loop
continue
f = interp1d( SW, Ix )
print f(0.25), f(0.5), f(0.75)
print f(0.75)-f(0.25)
我尝试使用不同的 numpy 函数,但我总是得到相同的错误
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我认为我不能使用 any()
或 all()
,因为那样只会包含所有数据,我想忽略 -inf。非常感谢任何帮助
您可以 filter
去除不需要的元素(例如 newlist=filter(lambda n: not numpy.isneginf(n), list_of_numbers)
),或者使用 numpy.nan_to_num(...)
.
假设我们在循环的一次迭代中有 SW
,如下所示:
>>> import numpy as np
>>> SW = [np.inf, -np.inf, np.nan, 0, 1]
>>> np.isfinite(SW)
[False, False, False, True, True]
>>> all(np.isfinite(SW))
False # since one or more in the list is False
如果您想跳过任何包含 nan, inf, -inf
的 SW
,您可以使用
if not all(np.isfinite(SW)):
continue
如果 nan
不是问题,只有 -inf
是那么你可以使用
if any(np.isneginf(SW)):
continue
如果 SW
的任何元素是 -inf
请注意,您无法比较使用 ==
与 np.nan
>>> x = np.nan
>>> x == np.nan
False
你使用 isnan
>>> np.isnan(x)
True