我正在尝试将numpy矩阵保存为灰度图像Image.fromarray.它似乎适用于随机矩阵,但不适用于特定的矩阵(应该出现一个圆圈).谁能解释我做错了什么?
from PIL import Image
import numpy as np
radius = 0.5
size = 10
x,y = np.meshgrid(np.linspace(-1,1,size),np.linspace(-1,1,size))
f = np.vectorize(lambda x,y: ( 1.0 if x*x + y*y < radius*radius else 0.0))
z = f(x,y)
print(z)
zz = np.random.random((size,size))
img = Image.fromarray(zz,mode='L') #replace z with zz and it will just produce a black image
img.save('my_pic.png')
Run Code Online (Sandbox Code Playgroud) 我知道这不是匿名函数的用途,但就像我试图通过匿名函数创建递归函数一样.递归函数的原型显然是阶乘函数.问题是,这是很难做出区分的情况下内的匿名函数.到目前为止我设法做的是:
f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;ans=cn;end');
f=@(n)f(1,n,f);
Run Code Online (Sandbox Code Playgroud)
或者:
f=@(cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;disp(cn);end');
f=@(n)f(1,n,f);
Run Code Online (Sandbox Code Playgroud)
不太令人满意的是,直接分配时仍然无法使用此功能,a=f(3)仍会产生错误,因为eval没有得到值.
所以我的问题是,您是否可以通过匿名函数实际执行递归函数,例如以允许例如a=f(3)仅依赖于本机matlab函数(或者您可以在命令行中创建的函数,如我在示例中所做的那样)计算阶乘的方式?
PS:我知道这没有任何实际用途,这只是对你可以弯曲和滥用Matlab语法的挑战.
假设我们有以下设置(从Hydra 文档中复制和缩短):
配置文件: config.yaml
db:
driver: mysql
user: omry
pass: secret
Run Code Online (Sandbox Code Playgroud)
蟒文件: my_app.py
import hydra
@hydra.main(config_path="config.yaml")
def my_app(cfg):
print(cfg.pretty())
if __name__ == "__main__":
my_app()
Run Code Online (Sandbox Code Playgroud)
当我们可以在函数上使用装饰器时,这很有效my_app。现在我想(为了小脚本和测试目的,但这并不重要)cfg在任何函数之外获取这个对象,只是在一个普通的 python 脚本中。据我了解装饰器的工作原理,应该可以调用
import hydra
cfg = hydra.main(config_path="config.yaml")(lambda x: x)()
print(cfg.pretty())
Run Code Online (Sandbox Code Playgroud)
但 thencfg只是None而不是所需的配置对象。所以看起来装饰器没有传递返回值。有没有另一种方法可以做到这一点cfg?
在(香草)GHCi 8.6.5 中,以下功能完全有效:
f xs@ ~(x:xt) = xs
Run Code Online (Sandbox Code Playgroud)
如果我现在在 9.0.1 中执行相同操作,则会出现错误
Suffix occurrence of @. For an as-pattern, remove the leading whitespace.
Run Code Online (Sandbox Code Playgroud)
仅删除@和之间的空白~似乎还不够,因为那样@~会被解释为运算符,所以我发现的唯一有效变体是
f xs@(~(x:xt)) = xs
Run Code Online (Sandbox Code Playgroud)
我想知道以下内容,但在更改说明中找不到答案:
xs@(~(x:xt))真的写这种模式的最好方法,还是有超过这个优选的方法是什么?我刚刚发现了jsfiddle,我喜欢这个工具并且已经开了帐户.现在我想分享一个我刚刚创建的小提琴,但我找不到保存它的网址或按钮,有人能告诉我该怎么做吗?它不会那么困难,但它让我疯了!
我最近不得不构建一个需要包含张量的模块。虽然反向传播使用 完美运行torch.nn.Parameter,但在打印网络对象时它没有出现。parameter与其他模块相比,为什么不包含它layer?(它不应该表现得像layer吗?)
import torch
import torch.nn as nn
class MyNet(torch.nn.Module):
def __init__(self):
super(MyNet, self).__init__()
self.layer = nn.Linear(10, 10)
self.parameter = torch.nn.Parameter(torch.zeros(10,10, requires_grad=True))
net = MyNet()
print(net)
Run Code Online (Sandbox Code Playgroud)
输出:
MyNet(
(layer): Linear(in_features=10, out_features=10, bias=True)
)
Run Code Online (Sandbox Code Playgroud) 在下面的玩具示例中,我们创建了一个新类型D,我们要为其实现 typeclass Show。现在让我们说对于所有构造函数,派生show函数都可以,除了A我们想要覆盖该默认值的一种特殊情况。
是否有可能做到这一点,或者你可以只派生出所有或不派生?
data D = A | B | C
deriving (Show)
-- goal:
-- show A = "A is special"
-- show B = "B"
-- show C = "C"
main = print $ show A
Run Code Online (Sandbox Code Playgroud)
我使用匿名函数实现了一个分段函数,该函数也可以在向量或矩阵中进行求值:
f = @(x) exp(((x-.25).*(x-.75)).^-1) .* (.25 < x & x < .75);
Run Code Online (Sandbox Code Playgroud)
问题是在准确评估时,0.25或者0.75我们试图评估Inf * 0哪些结果NaN.我想将这些NaN值设置为零.我知道这可以使用文件中定义的函数轻松完成,但我想知道是否有一个解决方案可以让你进行内联.(可能定义其他匿名帮助函数.)
使用deal我们可以编写具有多个输出参数的匿名函数,例如
minmax = @(x)deal(min(x),max(x));
[u,v] = minmax([1,2,3,4]); % outputs u = 1, v = 4
Run Code Online (Sandbox Code Playgroud)
但是如果你想为优化函数提供一个具有渐变的函数,那么fminunc这不起作用.该函数 (编辑:这不是真的,你只需要指定你是否真的想要使用渐变,使用例如fminunc有时会调用输入函数,有时会调用两个输出参数.optimset('SpecifyObjectiveGradient',true).然后在一次调用中它总是要求相同数量的参数.)
我们必须提供类似的东西
function [f,g] = myFun(x)
f = x^2; % function
g = 2*x; % gradient
Run Code Online (Sandbox Code Playgroud)
可以使用一个或两个输出参数调用.
那么有没有办法在不使用function关键字的情况下进行同样的内联?
matlab anonymous-function variadic-functions function-handle output
假设我ImageTk.PhotoImage在变量中存储了一些图像imgtk。我怎样才能将其转换回Image.Image?
原因是我想调整它的大小,但似乎.resize()只适用于Image.Images。