我的这些脚本可以执行大量昂贵的计算。我所做的一项优化是评估网格上昂贵的函数、缓存网格并为网格内的调用进行插值。将文件写出到磁盘非常重要,以便将来的会话可以从缓存中受益。当这个脚本仅供我个人使用时,我可以将缓存放在任何地方。现在我想将它合并到一个包中以进行更广泛的分发,我发现我需要有某种方法来知道在哪里存储包的缓存文件?我是否只需要做出一些决定,或者是否应该遵循一些程序(例如让用户在安装时、运行时等时修改目录)?
编辑:此代码还将具有基于其他来源的插值数据的功能。所以我也需要一个地方来存储这些,但需要知道这样做的标准在哪里,以及如何检测特定安装上的位置(在安装时硬编码的东西,或者Python模块可以检测它们的位置)在运行时重新安装?)。重点是,这个位置需要以我理解的临时目录不持久的方式持久化。因此,理想情况下,这应该在包的目录结构内部或用户主目录中的某个位置完成。如果在包的目录中,如果我必须使用权限来创建用户可以修改的目录,这是可以接受的。
使用虚线很好,因为它提供了一种区分线条的方法,而不依赖于读者能够感知颜色差异。问题是它们只有在线条的细节都大于虚线图案时才起作用。Matplotlib 函数的Axes.plot文档描述了如何自定义线条的颜色(使用关键字color)以及如何自定义破折号的图案(dash关键字)。有没有办法通过一次调用使绘图在两种不同的可选颜色之间交替,而不是“有”和“没有” Axes.plot?
我可以通过绘制同一条线两次(一次用实线,然后用虚线重叠绘制相同的数据)来实现这种效果,但这使得管理 alpha 透明度变得复杂(当一个图上有几条相交线时,半透明线是理想的选择) )。下图中的黑色和灰色线是用这些代码行生成的:
ax.plot(xv1, yv1, marker="None", linestyle="-", color=(0.8, 0.8, 0.8, 1.0))
ax.plot(xv1, yv1, marker="None", linestyle="--", color=(0.0, 0.0, 0.0, 1.0))
Run Code Online (Sandbox Code Playgroud)
编辑:希望通过一次调用就可以做到这一点的另一个原因Axis.plot是,它在创建图例时会正确显示示例行(我发现答案中给出的方法的唯一剩余缺点)。
我正在实施牛顿在预编译库中查找根的方法。常见的情况是使用从Float64to 的函数Float64,我希望库中存在它的优化编译版本。当然,我也会实现一个类型泛型版本,但 Julia 需要某种方式通过签名区分方法,以便它知道在运行时调用哪个。目前,实现是:
#Float64 optimized version
function findrootNewton( func, funcder, guess::Float64,
rtol::Float64=1e-12, abstol::Float64=1e-12, maxiter::Int=100 )
#make sure tolerances are positive
if rtol <= 0.0
error("findrootNewton: rtol must be a positive number")
end
if abstol <= 0.0
error("findrootNewton: abstol must be a positive number")
end
if maxiter <= 0.0
error("findrootNewton: maxiter must be a positive integer")
end
converged::Bool = false
oldx::Float64 = guess
newx::Float64 = oldx - ((func(oldx) / funcder(oldx))::Float64)
absdiff = …Run Code Online (Sandbox Code Playgroud) 计算机语言(如C/C++,Fortran,Julia等)的现代编译器的一个更有用的功能是它们能够在生成二进制文件之前对代码执行优化.如果我在Verilog中编写一个函数来制作FPGA"硬件"特殊功能,编译器会执行任何优化吗?作为一个具体的例子,假设我想设置一个使用Estrin方案进行并行化评估的多项式求值器,并且一些系数为0,编译器是否会看到并优化掉有效的NOOP?
确实Pytorch有numpy的的元素明智的等效逻辑运算符(logical_and,logical_or,logical_not和logical_xor)?在使用CPU时,在Pytorch张量上调用Numpy函数似乎可以很好地工作,甚至生成Pytorch张量作为输出。我主要是因为我假设如果pytorch计算在GPU中运行,那么这将无法很好地工作。
我遍历了Pytorch的文档索引,查找了所有包含字符串“ and”的函数,但似乎没有任何相关性。
我正在研究有关定义新的autograd函数的PyTorch教程。我要实现的autograd函数是一个包装器torch.nn.functional.max_pool1d。这是我到目前为止的内容:
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.autograd as tag
class SquareAndMaxPool1d(tag.Function):
@staticmethod
def forward(ctx, input, kernel_size, stride=None, padding=0, dilation=1, \
return_indices=False, ceil_mode=False):
ctx.save_for_backward( input )
inputC = input.clone() #copy input
inputC *= inputC
output = F.max_pool1d(inputC, kernel_size, stride=stride, \
padding=padding, dilation=dilation, \
return_indices=return_indices, \
ceil_mode=ceil_mode)
return output
@staticmethod
def backward(ctx, grad_output):
input, = ctx.saved_tensors
grad_input = get_max_pool1d_grad_somehow(grad_output)
return 2.0*input*grad_input
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何获得包装函数的梯度?我知道给出的示例很简单,但可能还有其他方法可以执行此操作,但是我想做的事情适合此框架,并且需要我实现一个autograd功能。
编辑:检查了此博客文章后,我决定尝试以下操作backward …
python ×3
pytorch ×2
autograd ×1
caching ×1
fpga ×1
julia ×1
matplotlib ×1
memoization ×1
methods ×1
numpy ×1
packaging ×1
python-3.x ×1
signature ×1
types ×1
verilog ×1