我想找到定义了x的最大值的函数。
我定义了多个数学函数。我可以画出每个人。现在我想要一个python函数告诉我在给定x(例如x = 1)下哪个函数的值最高。
WH
对于x = 1,结果应为“线性”,对于x = 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