我想使用scipy.optimize最小化大量线性不等式上的函数(最终是非线性的)。作为热身,我正在尝试在框0 <= x <= 1、0 <= y <= 1的情况下最小化x + y。按照以下Johnny Drama的建议,我目前正在使用dict-comprehesion生成不等式的字典,但没有得到预期的答案(最小值= 0,最小值为(0,0))。
新的代码部分(当前相关):
import numpy as np
from scipy.optimize import minimize
#Create initial point.
x0=[.1,.1]
#Create function to be minimized
def obj(x):
return x[0]+x[1]
#Create linear constraints lbnd<= A*(x,y)^T<= upbnd
A=np.array([[1,0],[0,1]])
b1=np.array([0,0])
b2=np.array([1,1])
cons=[{"type": "ineq", "fun": lambda x: np.matmul(A[i, :],x) -b1[i]} for i in range(A.shape[0])]
cons2=[{"type": "ineq", "fun": lambda x: b2[i]-np.matmul(A[i, :], x) } for i in range(A.shape[0])]
cons.extend(cons2)
sol=minimize(obj,x0,constraints=cons)
print(sol)
Run Code Online (Sandbox Code Playgroud)
问题的原始版本:
我想在scipy.optimize中使用LinearConstraint对象,如此处的教程中所述:“定义线性约束”
我试图做一个简单的例子,答案很明显:在平方0 <= x <= 1,0 …
我想在我的 Shiny 应用程序中插入非预定义数量的图表。我使用了一个for循环和一系列的insertUI。
问题是当我运行它时,文本元素的行为符合预期,但图表都呈现相同的图像。我怎样才能防止这种情况发生?
这是一个代表:
library(shiny)
ui <- fluidPage(
tags$div(
class = "this",
actionButton("go", "go")
)
)
server <- function(input, output, session) {
observeEvent( input$go , {
x <- reactiveValues(x = list(iris, mtcars, airquality))
for (i in 1:3){
insertUI(
".this",
ui = tagList(
p(paste("Number", i)),
renderPlot({
plot(x$x[[i]])
})
))
}
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
在最近的Hacker Newsletter问题中,这篇关于Python中装饰器的非常有用的文章已被链接.我喜欢这篇文章,我想我理解了大多数装饰器的例子.但是,在非装饰器的memoization示例中,我对代码非常困惑:
def memoize(fn):
stored_results = {}
def memoized(*args):
try:
# try to get the cached result
return stored_results[args]
except KeyError:
# nothing was cached for those args. let's fix that.
result = stored_results[args] = fn(*args)
return result
return memoized
Run Code Online (Sandbox Code Playgroud)
我很困惑这个函数如何创建一个stored_results附加到的持久字典.重新阅读后,将其复制/粘贴到我的编辑器中并使用它,并在网上寻求帮助,我仍然不明白语法stored_results[args] = fn(*args)是做什么的.
(1)文章建议上面的代码将返回函数,但现在它将在执行新的参数之前首先搜索字典.这是怎么发生的?为什么不stored_results只是当地人memoize?memoized返回时为什么不被销毁?
(2)解释通过这里的论点的其他问题或网络资源的链接*args也会有所帮助.如果*args是参数列表,为什么我们可以使用语法 stored_results[args],通常在尝试索引列表中的字典时会出现不可出错的错误?
感谢任何澄清的想法.
我正在尝试使用列表理解为延迟执行创建一个 lambda 列表。下面是一个简单的例子。
def func_a(message: str) -> None:
print('a: ' + message)
def func_b(message: str) -> None:
print('b: ' + message)
msg = 'some message'
funcs = [func_a, func_b]
funcs_w_args = [lambda : func(msg) for func in funcs]
for func in funcs_w_args:
func()
Run Code Online (Sandbox Code Playgroud)
结果是
b: some message
b: some message
Run Code Online (Sandbox Code Playgroud)
而想要的结果应该是
a: some message
b: some message
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
所有:
def a(p):
return p+1
def gen(func, k=100):
l= []
for x in range(k):
temp = ("%s_with_parameter_%s" %(func.__name__, x), lambda: func(x))
# maybe this will be more clear to explain my quetion:
# i want to get list/dict which can bind self-defined string and function together
l.append(temp)
return l
l = gen(a, 100)
for x in range(len(l)):
l[x][1]()
100
100
100
100
100
100
100
100
Run Code Online (Sandbox Code Playgroud)
...我想输出将是1 to 101打印输出,但它显示了一个100列表.
我可以在这里获得这个片段的帮助吗?
谢谢!
我在这里不知所措。我正在尝试在 for 循环内定义一个函数。该函数使用循环内定义的变量,看起来类似:
myFuns = []
for i in range(10):
j = i + 4
def fun(): print(j)
myFuns += [fun]
Run Code Online (Sandbox Code Playgroud)
在此循环结束时,myFuns 中的函数有所不同,但它们执行相同的操作,显然,这不是传递给 fun() 的新变量 j,而是 j 的引用。
我很高兴知道如何传递 j 的值而不仅仅是引用。
我不知道在循环中创建的变量可能比循环寿命更长,所以这对我来说是一个新领域......
可能重复:
Python中的词法闭包
假设我有以下代码
callbacks = []
for i in range(10):
callbacks.append(lambda x: i)
Run Code Online (Sandbox Code Playgroud)
所有函数都callbacks将返回最终值i.如何创建在创建时返回i的当前值的回调?
我正在尝试重新创建一个称为睡眠排序的愚蠢想法,但是输出远非预期。
我期待
0
1
2
3
5
Run Code Online (Sandbox Code Playgroud)
但是我得到
0
5
5
5
5
Run Code Online (Sandbox Code Playgroud)
...这很奇怪,因为线程确实:休眠(项目)秒,然后打印该项目。
这是我的代码
0
1
2
3
5
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗?非常感谢您提前!
我正在阅读计算机程序的结构和解释 - 在计算机科学领域很有名.
受到函数式编程的鼓励,我尝试用Python而不是Scheme编写代码,因为我发现它更容易使用.但接下来的问题是:我需要多次使用Lambda函数,但我无法弄清楚如何使用lambda复杂的操作来编写一个未命名的函数.
在这里,我想编写一个lambda函数,其中一个字符串变量exp作为唯一的参数并执行exec(exp).但我得到一个错误:
>>> t = lambda exp : exec(exp)
File "<stdin>", line 1
t = lambda exp : exec(exp)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
怎么会发生?如何应对呢?
我阅读了我的Python指南,并在没有找到我想要的答案的情况下搜索了Google.这是否意味着lambdapython 中的函数只是设计为语法糖?