Python中是否有一种语言可以用来实现逻辑数据切割?
假设我有以下形式的数据:Python中是否有一种语言可以用来实现逻辑数据切割?,python,logic,Python,Logic,假设我有以下形式的数据: variable1 = [23, 20, 13, 24, 25, 28, 26, 17, 18, 29] variable2 = [37, 46, 41, 40, 40, 39, 43, 42, 45, 56] variable3 = [101, 120, 110, 140] 现在让我们假设我想应用一些数据切割。也许我可以有一个削减的要求,比如: data = DataClass(variables = [variable1, variable2, variable3
variable1 = [23, 20, 13, 24, 25, 28, 26, 17, 18, 29]
variable2 = [37, 46, 41, 40, 40, 39, 43, 42, 45, 56]
variable3 = [101, 120, 110, 140]
现在让我们假设我想应用一些数据切割。也许我可以有一个削减的要求,比如:
data = DataClass(variables = [variable1, variable2, variable3])
data.applyCut(cut = "variable1 >=20; 40 <= variable2 <= 45")
data.applyCut(cut = "if no variable1 then variable3 > 115")
data.print()
>>> variable1 = [23, 20, 13, 24, 25, 28, 26, 17, 18, 29]
>>> variable2 = [37, 46, 41, 40, 40, 39, 43, 42, 45, 56]
>>> variable3 = [101, 120, 110, 140]
>>> variable1 = [value for value in variable1 if value >= 20]
>>> variable2 = [value for value in variable2 if (value >= 40) and (value <=45)]
>>> print(variable1)
[23, 20, 24, 25, 28, 26, 29]
>>> print(variable2)
[41, 40, 40, 43, 42, 45]
>>> if not variable1:
... variable3 = [value for value in variable3 if value > 115]
... else:
... variable3 = [value for value in variable3]
...
>>> print(variable3)
[101, 120, 110, 140]
- 我要求
的所有值都大于或等于20variable1
- 我要求
的所有值大于或等于40,小于或等于45variable2
- 如果
的某些值已通过切割,则variable1
未应用切割variable3
- 如果
的某些值未通过切割,则我要求variable1
的所有值都大于115variable3
data = DataClass(variables = [variable1, variable2, variable3])
data.applyCut(cut = "variable1 >=20; 40 <= variable2 <= 45")
data.applyCut(cut = "if no variable1 then variable3 > 115")
data.print()
>>> variable1 = [23, 20, 13, 24, 25, 28, 26, 17, 18, 29]
>>> variable2 = [37, 46, 41, 40, 40, 39, 43, 42, 45, 56]
>>> variable3 = [101, 120, 110, 140]
>>> variable1 = [value for value in variable1 if value >= 20]
>>> variable2 = [value for value in variable2 if (value >= 40) and (value <=45)]
>>> print(variable1)
[23, 20, 24, 25, 28, 26, 29]
>>> print(variable2)
[41, 40, 40, 43, 42, 45]
>>> if not variable1:
... variable3 = [value for value in variable3 if value > 115]
... else:
... variable3 = [value for value in variable3]
...
>>> print(variable3)
[101, 120, 110, 140]
data=DataClass(变量=[variable1,variable2,variable3])
data.applyCut(cut=“variable1>=20;40我认为numpy可能是您想要的:
import numpy as np
v1 = np.array([23, 20, 13, 24, 25, 28, 26, 17, 18, 29])
v2 = np.array([37, 46, 41, 40, 40, 39, 43, 42, 45, 56])
v3 = np.array([101, 120, 110, 140])
def myfilter(v1, v2, v3): # how I would parse your "DataClass" code
valid_ixs = (v1 >= 20) & (v2 >= 40) & (v2 <= 45)
if any(valid_ixs): # could also use valid_ixs.sum()
return v3[v3 > 115]
return v3
print(myfilter(v1, v2, v3))
# what you're doing in python
v1 = v1[v1 >= 20]
v2 = v2[(v2 >= 40) & (v2 <= 45)]
v3 = v3[v3 > 115] if v1 else v3
将numpy导入为np
v1=np.数组([23,20,13,24,25,28,26,17,18,29])
v2=np.数组([37,46,41,40,40,39,43,42,45,56])
v3=np.数组([101120110140])
def myfilter(v1、v2、v3):#我将如何解析您的“数据类”代码
有效的ixs=(v1>=20)和(v2>=40)和(v2 115]
返回v3
打印(myfilter(v1、v2、v3))
#你在python中做什么
v1=v1[v1>=20]
v2=v2[(v2>=40)和(v2 115]如果v1或v3
请注意,在python中,5您提供的列表理解如何不能满足您的需要?为此,您可以考虑更适合DSL编写的语言,例如Haskell或Scala。如果variable1
是numpy.ndarray
,variable1[variable1>=20]
将为您提供数组([23,20,24,25,28,26,29])
。我同意@FredLarson的观点。现在,如果你要处理数字数据,你可能想使用NumPy!NumPy,甚至熊猫(它们的行为几乎可以像熊猫一样),这太好了。非常感谢你的建议。这三条关键的行是如此的简短。这对我来说太棒了!