所以,我终于找到了一个可以使用新DataKinds扩展的任务(使用ghc 7.4.1).这是Vec我正在使用的:
data Nat = Z | S Nat deriving (Eq, Show)
data Vec :: Nat -> * -> * where
Nil :: Vec Z a
Cons :: a -> Vec n a -> Vec (S n) a
Run Code Online (Sandbox Code Playgroud)
现在,为了方便我想实现fromList.简单的递归/折叠基本上没有问题 - 但我无法弄清楚如何给它正确的类型.作为参考,这是Agda版本:
fromList : ? {a} {A : Set a} ? (xs : List A) ? Vec A (List.length xs)
Run Code Online (Sandbox Code Playgroud)
我的Haskell方法,使用我在这里看到的语法:
fromList :: (ls :: [a]) -> Vec (length ls) a
fromList [] …Run Code Online (Sandbox Code Playgroud) 对于我的另一个答案,我编写了以下代码,为可枚举的s 提供了对角遍历的 Universe实例Generic(它从那里的版本略微更新,但使用相同的逻辑):
{-# LANGUAGE DeriveGeneric, TypeOperators, ScopedTypeVariables #-}
{-# LANGUAGE FlexibleInstances, FlexibleContexts, DefaultSignatures #-}
{-# LANGUAGE UndecidableInstances, OverlappingInstances #-}
import Data.Universe
import Control.Monad.Omega
import GHC.Generics
import Control.Monad (mplus, liftM2)
class GUniverse f where
guniverse :: Omega (f x)
instance GUniverse U1 where
guniverse = return U1
instance (Universe c) => GUniverse (K1 i c) where
guniverse = fmap K1 $ each (universe :: [c]) -- (1)
instance (GUniverse f) => GUniverse (M1 i …Run Code Online (Sandbox Code Playgroud) 我被一些烦人的事情绊倒了。我知道 haskell 与弱头部范式 (WHNF) 一起工作,我知道这是什么。将以下代码输入 ghci(我正在使用命令 :sprint 将表达式简化为 WHNF,据我所知。):
let intlist = [[1,2],[2,3]]
:sprint intlist
Run Code Online (Sandbox Code Playgroud)
给intlist = _这使得完全意义的我。
let stringlist = ["hi","there"]
:sprint stringlist
Run Code Online (Sandbox Code Playgroud)
给stringlist = [_,_]
这个已经让我困惑。但是之后:
let charlist = [['h','i'], ['t','h','e','r','e']]
:sprint charlist
Run Code Online (Sandbox Code Playgroud)
出人意料地给出 charlist = ["hi","there"]
据我了解 Haskell,字符串只不过是字符列表,这似乎是通过检查类型"hi" :: [Char]和['h','i'] :: [Char].
我很困惑,因为根据我的理解,上面的所有三个示例或多或少都相同(列表列表),因此应该减少到相同的 WHNF,即 _。我错过了什么?
谢谢
haskell functional-programming reduction ghci weak-head-normal-form
我试图将数字 10^19 保存在 Julia 的变量中。
我知道它正在溢出,但我认为做类似的事情BigInt(10^19)或Int128(10^19)会解决问题,但事实并非如此。
有什么想法吗?
Vector{Missing}和之间的以下差异Vector{Int}让我感到惊讶(以积极的方式):
julia> @btime fill(20, 10^7);
15.980 ms (2 allocations: 76.29 MiB)
julia> @btime fill(missing, 10^7);
20.603 ns (1 allocation: 80 bytes)
julia> Base.summarysize(fill(20, 10^7))
80000040
julia> Base.summarysize(fill(missing, 10^7))
40
julia> typeof(fill(20, 10^7))
Vector{Int64} (alias for Array{Int64, 1})
julia> typeof(fill(missing, 10^7))
Vector{Missing} (alias for Array{Missing, 1})
Run Code Online (Sandbox Code Playgroud)
鉴于这fill(missing, n)不会产生像 那样的优化结构FillArray,那么这种对单例的优化是如何实现的呢?我猜想它会以某种方式自动从单例大小为零的事实中消失,但是如何呢?
在Gadfly中直接绘制函数很容易:
plot([sin, cos], 0, 25)
Run Code Online (Sandbox Code Playgroud)
这给了我两个不同颜色的线,在传说中的东西像自动标记f_1和f_2:
如何更改"颜色"图例中的默认名称?
我有一系列字典如下:
julia> data
2-element Array{Any,1}:
Dict{String,Any}("ratio1"=>1.36233,"time"=>"2014-06-19T15:47:40.000000Z","ratio2"=>1.36243)
Dict{String,Any}("ratio1"=>1.3623,"time"=>"2014-06-19T15:48:00.000000Z","ratio2"=>1.36245)
Run Code Online (Sandbox Code Playgroud)
我怎样才能把它一次性弹出到一个数据帧中,而不用一个一个地循环遍历每个字典和键,这样我就有一个如下所示的数据帧:
2×3 DataFrame
? Row ? ratio1 ? ratio2 ? time ?
? ? Float64 ? Float64 ? String ?
?????????????????????????????????????????????????????????
? 1 ? 1.36233 ? 1.36243 ? 2014-06-19T15:47:40.000000Z ?
? 2 ? 1.3623 ? 1.36245 ? 2014-06-19T15:48:00.000000Z ?
Run Code Online (Sandbox Code Playgroud) 我的问题不是F = svd(A),可以先为 SVD 结构分配适当的内存,然后再做F .= svd(A)吗?
我的想法是这样的:
function main()
F = Vector{SVD}(undef,10)
# how to preallocate F?
test(F)
end
function test(F::Vector{SVD})
for i in 1:10
F .= svd(rand(3,3))
end
end
Run Code Online (Sandbox Code Playgroud) TL/DR:是否真的没有办法只告诉jupyter console在某些 conda 环境中运行,而不首先在该环境中不必要地安装(并因此依赖)Jupyter?
我确实试图让这看起来不完全像咆哮......我希望你看到这里有一个实际的问题。
似乎让 Jupyter 在 conda 环境中工作需要
我觉得这有点令人惊讶,因为我不认为 Jupyter 作为项目的要求,而只是作为另一个编辑器/IDE 之类的东西,利用环境。Conda 的目的是管理可重现的依赖关系;Jupyter 应该是在我告诉它的环境中解释代码。由于我想将environment.yml存储在git中并与其他人共享,因此我认为要求他们安装Jupyter没有任何意义;他们甚至可能不会使用它。
然而,它似乎根本不是这样工作的。感觉就像当我想使用 Emacs 来利用环境时,我必须在每个环境中安装一个“emacskernel”包。事情不是这样的。
我想要的是有一个全局安装的 Jupyter,它可以指向不同的环境 - 类似于 Julia REPL 的工作方式julia --project=...(是的,我知道 conda 不是内置的语言包管理器,但是你应该明白这个类比......)。(如果 conda 环境“继承”,即回退到“全局环境”以查找未找到的依赖项,那么这会起作用,并且您可以只使用每个环境中的全局 Jupyter;但据我了解,它们不这样做? )
这有可能吗?我缺少什么?有没有更好的替代方案提供全球 Jupyter + 本地环境?(我必须承认我从未使用过 virtualenv 之类的东西......)
(这个较旧的问题似乎涵盖了 pipelinev 的相同主题,但那里没有真正的答案......既没有明确的NO,也没有解释原因。)
在 Julia 中分配一个数组Union{T, Missing}是非常昂贵的。有什么解决方法吗?
julia> @time Vector{Union{Missing, Int}}(undef, 10^7);
0.031052 seconds (2 allocations: 85.831 MiB)
julia> @time Vector{Union{Int}}(undef, 10^7);
0.000027 seconds (3 allocations: 76.294 MiB)
Run Code Online (Sandbox Code Playgroud) julia ×6
haskell ×3
arrays ×2
conda ×1
gadfly ×1
ghc-generics ×1
ghci ×1
jupyter ×1
performance ×1
python ×1
reduction ×1
runtime ×1
strictness ×1
syntax ×1
type-systems ×1