微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使这个输入函数更快

如何解决使这个输入函数更快

我正在练习一些考试题,但遇到了一个我无法弄清楚的时间限制问题。我认为这与我如何遍历输入有关。

这是著名的泰坦尼克号数据集,所以我不会费心打印 df 的样本,因为我相信每个人都熟悉它。

函数比较作为输入提供的两个乘客之间的相似性。此外,我正在用整数映射 Sex 列,以便在您将在下面看到的乘客之间进行比较。

我还想这可能是我如何索引和定位每位乘客的价值,但我又不确定

函数如下,时间限制为 1 秒,但当 no_of_queries == 100 时,函数需要 1.091s。

df = pd.read_csv("titanic.csv")

mappings = {'male': 0,'female':1}
df['Sex'] = df['Sex'].map(mappings)


def function_similarity(no_of_queries):  

  for num in range(int(no_of_queries)):
     
      x = input()
      passenger_a,passenger_b = x.split()
      passenger_a,passenger_b = int(passenger_a),int(passenger_b)

      result = 0  
      if int(df[df['PassengerId'] == passenger_a]['Pclass']) == int(df[df['PassengerId'] == passenger_b]['Pclass']):  
          result += 1  
      if int(df[df['PassengerId'] ==passenger_a]['Sex']) == int(df[df['PassengerId'] ==passenger_b]['Sex']):  
          result += 3  
      if int(df[df['PassengerId'] ==passenger_a]['SibSp']) == int(df[df['PassengerId'] ==passenger_b]['SibSp']):  
          result += 1  
      if int(df[df['PassengerId'] == passenger_a]['Parch']) == int(df[df['PassengerId'] == passenger_b]['Parch']):  
          result += 1  
      result += max(0,2 - abs(float(df[df['PassengerId'] ==passenger_a]['Age']) - float(df[df['PassengerId'] ==passenger_b]['Age'])) / 10.0)
      result += max(0,2 - abs(float(df[df['PassengerId'] ==passenger_a]['fare']) - float(df[df['PassengerId'] ==passenger_b]['fare'])) / 5.0)
      print(result / 10.0)



function_similarity(input())
  

解决方法

按每个乘客 a 和 b 的 id 值计算一次乘客行。

df = pd.read_csv("titanic.csv")

mappings = {'male': 0,'female':1}
df['Sex'] = df['Sex'].map(mappings)


def function_similarity(no_of_queries):  

  for num in range(int(no_of_queries)):
     
      x = input()
      passenger_a,passenger_b = x.split()
      passenger_a,passenger_b = df[df['PassengerId'] == int(passenger_a)],df[df['PassengerId'] == int(passenger_b)]

      result = 0  
      if int(passenger_a['Pclass']) == int(passenger_b['Pclass']):  
          result += 1  
      if int(passenger_a['Sex']) == int(passenger_b['Sex']):  
          result += 3  
      if int(passenger_a['SibSp']) == int(passenger_b['SibSp']):  
          result += 1  
      if int(passenger_a['Parch']) == int(passenger_b['Parch']):  
          result += 1  
      result += max(0,2 - abs(float(passenger_a['Age']) - float(passenger_b['Age'])) / 10.0)
      result += max(0,2 - abs(float(passenger_a['Fare']) - float(passenger_b['Fare'])) / 5.0)
      print(result / 10.0)



function_similarity(input())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。