查找具有定义的x值的最大值的函数

时间:2019-01-08 17:41:02

标签: python

我想找到定义了x的最大值的函数。

我定义了多个数学函数。我可以画出每个人。现在我想要一个python函数告诉我在给定x(例如x = 1)下哪个函数的值最高。

WH

对于x = 1,结果应为“线性”,对于x = 4,结果应为“可比”。

4 个答案:

答案 0 :(得分:2)

您可以使用字典来命名变量并找到最大值。

x = 1
d = {'parable' : parable(x), 'linear' : linear(x), 'sine' : sine(x)}
print(max(d, key=d.get))

答案 1 :(得分:0)

将函数放入字典中并使用library(shiny) library(ggplot2) ui <- fluidPage( titlePanel("Old Faithful Geyser Data"), # Sidebar with a slider input for number of bins sidebarLayout( sidebarPanel( sliderInput("bins1", "Number of bins:", min = 1, max = 50, value = 30), sliderInput("bins2", "Number of bins:", min = 1, max = 10, value = 5) ), mainPanel( tabsetPanel( tabPanel("PLOT", fluidRow( column(6, plotOutput("distPlot")), column(6, plotOutput("distPlot2")) ) # splitLayout Alternative # fluidRow( # splitLayout(plotOutput("distPlot"), plotOutput("distPlot2")) # ) ) ) ) ) ) server <- function(input, output, session) { x <- faithful[, 2] y <- faithful[, 1] output$distPlot <- renderPlot({ binsOut1 <- seq(min(x), max(x), length.out = input$bins1 + 1) hist(x, breaks = binsOut1, col = 'darkgray', border = 'white') }) output$distplot2 <- renderPlot({ binsOut2 <- seq(min(y), max(y), length.out = input$bins2 + 1) hist(y, breaks = binsOut2, col= 'blue', border= 'black') }) session$onSessionEnded({ print("Stop!") stopApp }) } # Run the application shinyApp(ui = ui, server = server) 函数。

max()

答案 2 :(得分:0)

也许几个函数返回相同(最高)值。在这种情况下,我会提出以下解决方案:

 newDatatype->setData(0, Qt::ItemDataRole::UserRole, datObjKey);

这会将所有最大功能保存在列表import numpy as np funcs = {"linear" :lambda x: 3*x, "parable": lambda x: x**2, "sine": lambda x: np.sin(x)} x = 1 res = {key:val(x) for key, val in funcs.items()} maximum = max(res.values()) highest = [key for key, val in res.items() if val==maximum] 中。您可以使用

进行打印
highest

例如,使用print(", ".join(highest) + " is/are the function(s) with the highest value: %d" %(maximum)) 它会打印:

x = 0

答案 3 :(得分:0)

numpy解决方案:

由于无论如何都需要所有值进行绘制,因此可以将它们保留更长的时间,并使用numpy使用numpy.select有效地计算最大值及其对应的函数。

演示:

>>> import numpy as np
>>> x = np.arange(10) # dummy values for demo                                                                                                           
>>> parable=x**2                                                                                                                  
>>> linear=3*x                                                                                                                    
>>> sine=np.sin(x)                                                                                                                
>>>                                                                                                                               
>>> values = np.c_[parable, linear, sine]                                                                                         
>>> values                                                                                                                        
array([[ 0.        ,  0.        ,  0.        ],
       [ 1.        ,  3.        ,  0.84147098],
       [ 4.        ,  6.        ,  0.90929743],
       [ 9.        ,  9.        ,  0.14112001],
       [16.        , 12.        , -0.7568025 ],
       [25.        , 15.        , -0.95892427],
       [36.        , 18.        , -0.2794155 ],
       [49.        , 21.        ,  0.6569866 ],
       [64.        , 24.        ,  0.98935825],
       [81.        , 27.        ,  0.41211849]])
>>> argmaxes = values.argmax(axis=1) 
>>> argmaxes                                                                                                        
array([0, 1, 1, 0, 0, 0, 0, 0, 0, 0])
>>> np.select([argmaxes == 0, argmaxes == 1, argmaxes == 2], ['parable', 'linear', 'sine'])                                       
array(['parable', 'linear', 'linear', 'parable', 'parable', 'parable',
       'parable', 'parable', 'parable', 'parable'], dtype='<U21')

pandas解决方案:

您也可以考虑使用pandas来提高可读性。

>>> import pandas as pd                                                                                                           
>>> data = pd.DataFrame(values, index=pd.Index(x, name='x'), columns=['parable', 'linear', 'sine'])                               
>>> data                                                                                                                          
   parable  linear      sine
x                           
0      0.0     0.0  0.000000
1      1.0     3.0  0.841471
2      4.0     6.0  0.909297
3      9.0     9.0  0.141120
4     16.0    12.0 -0.756802
5     25.0    15.0 -0.958924
6     36.0    18.0 -0.279415
7     49.0    21.0  0.656987
8     64.0    24.0  0.989358
9     81.0    27.0  0.412118
>>>                                                                              
>>> data['name_of_max'] = data.idxmax(axis=1)                                                                                     
>>> data                                                                                                                          
   parable  linear      sine name_of_max
x                                       
0      0.0     0.0  0.000000     parable
1      1.0     3.0  0.841471      linear
2      4.0     6.0  0.909297      linear
3      9.0     9.0  0.141120     parable
4     16.0    12.0 -0.756802     parable
5     25.0    15.0 -0.958924     parable
6     36.0    18.0 -0.279415     parable
7     49.0    21.0  0.656987     parable
8     64.0    24.0  0.989358     parable
9     81.0    27.0  0.412118     parable