类型系统简介 - 知乎用户frBud6的文章 - 知乎
https://zhuanlan.zhihu.com/p/65626985
超市买菜 - 圆角骑士魔理沙的文章 - 知乎
https://zhuanlan.zhihu.com/p/66349646
#PLT 魔法店里一些文章还是不错的(lambda类型系统, SystemF一大堆TypeNode 集),可惜表达方式太弱了.(他们写LaTeX时仿佛不知道这些在Rust等土直里就是tuple/struct/enum-union ,所以只是贴了无语序的“数学公式”,没有告诉读者这些严谨符号, Product=tuple, Record={} ,其实和user视角是一样的,换了“除法”语序和符号而已,甚至没告诉他咋写typecheck,只是举了程序形式的 with a,b=M:=A*B do N:=R 类的例子,还有(Type inBasic)(Type Arrow AB) 后Valx/fn/app 一致性;我就觉得奇怪了,难道作者不知道这些在“工程世界”都有对应更直白的名词和示例写法?没见过另外一个世界?
一个简单的问题都找不到联系来比对,所以我可以合理推测更有意思的依赖值-类型 其实是因为他们语言和归纳能力的贫瘠,才弄得非常隐晦。可惜那样我就不懂了。
现在我也真是很草,喜欢用自创名词,
Continuation程续 reduce单步 tailrec伪递归 Unification值变量归一 CPS不返回编程=传程续=传回调 Currying颗粒化喂参
polymorphism同名多义 variance型参in-out位 closure变量域闭包 coroutine断续函数 prod/sum组合分支类型 first-class值
combinator可组合器具 callByName传闭包晚求值 EDSL码构语法树 Exception非局部级联返回
gradual-type部分类型 duck/dynamic-type无类型 <T,R>类型一致位
常量Lit 引用Var 表达式Expr 语句Stmt|组合句Block post-order-walk深先树重写/遍历 rev-polish算符执行序重排 recursive-descent前缀提取-return解析 数值类型提升-数值拓宽
还真是挺不严谨的呢🌚 几个字就定义,果然还是不如多态好,那样涵义就不确定了,可以随便外链和修改了。 再加上杂交数学表示法,就能过滤不少外行呢
“ 所以 co- 有了太多太多的译法:coerce 是围在一起,成了约制;covariant 是一起变型,成了协变;collect 是选出来放在一起,成了收集;conjugate 比作马车曲木的两端,成了共轭。coauthor 是合作者;codomain 是陪域。余、共、互、逆、陪、伴、协、同、交、合、配、对、逆、反、偶、上……我们在看到这个词头时,不必像意呆利那个把胸部当成 jiba 的曲直不分的家伙那样直译,而是像徐光启那样,直接看清它的本质是什么。知其变,守其恒,为天下式。当我看到陈意云老师把 coinduction 翻译成「余归纳」的时候,我很困惑:「余」在哪了?而当我发现 coinduction 就是把归纳的过程反过来后,自然就有了它的译法:逆归纳。「反」是一个静态的描述,而「逆」是一个动态的表述。当归纳的箭头有了流动的方向,逆流而上便是把箭头反过来最自然的想法了。于是在英语世界,有了很多关于 co- 的妙语:Q : What does a category theorist call a reader?A : A "co-author".问:范畴论学家把读者称为什么?答:「协作者」。
负负得正,看来 co- 是对合(involution)的。
如果你对知识进行了彻底的分析而非某种机械的套弄,在你脑中生成的概念与生硬的文字之间已经没有很强的相似性,我们就认为这个概念是被理解的。彻底的分析和非凡的变换,是获得真知的标志性特征。
作者:Oling Cat
链接:https://zhuanlan.zhihu.com/p/56285253
得了吧。天下没有一个理论那么简单,理论能涵盖自己,却忘了世界有许多它描述不住的东西。这只是个游戏,情绪自信什么也优化不了 #statement
知其变,领域太多你知不穷,更何谈变化。守其恒,抽象太多涵盖万物等于什么没抽象,抽象徳不配位、言不及义,仍需再优化学习。
从变中得不变,这种一时的欣喜终究是因为接触不够广导致的,它只是发展的第0步。人作为大自然的产物,一种动物,是永远无法获得真理的。
如果你总是自认为彻底理解了知识,你仍在排斥它。因为真正的理解彻底是与之相融,让它成为自己的语言,而不是把它当成独立概念;这个过程和那真知亦无不平凡,只是朝朝暮暮,反复出现,边角不断消磨,本质才得以显现; 一个人一类知识是有时间线的,哪像编译器那样彻底变换 一次成功;得到之后,只是相处的开始。获得真知 只是冷落了真知
"SICP"附近有点好玩的内容,像关于 表述-函数-描述式编程(不过描述式解释器我写过,感觉还是不能实现函数式的功能.. 那就要看 SWI-Prolog.org 啥的能不能用于查询外的功能,应该不能独立存在
https://zhuanlan.zhihu.com/p/65626985
超市买菜 - 圆角骑士魔理沙的文章 - 知乎
https://zhuanlan.zhihu.com/p/66349646
#PLT 魔法店里一些文章还是不错的(lambda类型系统, SystemF一大堆TypeNode 集),可惜表达方式太弱了.(他们写LaTeX时仿佛不知道这些在Rust等土直里就是tuple/struct/enum-union ,所以只是贴了无语序的“数学公式”,没有告诉读者这些严谨符号, Product=tuple, Record={} ,其实和user视角是一样的,换了“除法”语序和符号而已,甚至没告诉他咋写typecheck,只是举了程序形式的 with a,b=M:=A*B do N:=R 类的例子,还有(Type inBasic)(Type Arrow AB) 后Valx/fn/app 一致性;我就觉得奇怪了,难道作者不知道这些在“工程世界”都有对应更直白的名词和示例写法?没见过另外一个世界?
一个简单的问题都找不到联系来比对,所以我可以合理推测更有意思的依赖值-类型 其实是因为他们语言和归纳能力的贫瘠,才弄得非常隐晦。可惜那样我就不懂了。
现在我也真是很草,喜欢用自创名词,
Continuation程续 reduce单步 tailrec伪递归 Unification值变量归一 CPS不返回编程=传程续=传回调 Currying颗粒化喂参
polymorphism同名多义 variance型参in-out位 closure变量域闭包 coroutine断续函数 prod/sum组合分支类型 first-class值
combinator可组合器具 callByName传闭包晚求值 EDSL码构语法树 Exception非局部级联返回
gradual-type部分类型 duck/dynamic-type无类型 <T,R>类型一致位
常量Lit 引用Var 表达式Expr 语句Stmt|组合句Block post-order-walk深先树重写/遍历 rev-polish算符执行序重排 recursive-descent前缀提取-return解析 数值类型提升-数值拓宽
还真是挺不严谨的呢🌚 几个字就定义,果然还是不如多态好,那样涵义就不确定了,可以随便外链和修改了。 再加上杂交数学表示法,就能过滤不少外行呢
“ 所以 co- 有了太多太多的译法:coerce 是围在一起,成了约制;covariant 是一起变型,成了协变;collect 是选出来放在一起,成了收集;conjugate 比作马车曲木的两端,成了共轭。coauthor 是合作者;codomain 是陪域。余、共、互、逆、陪、伴、协、同、交、合、配、对、逆、反、偶、上……我们在看到这个词头时,不必像意呆利那个把胸部当成 jiba 的曲直不分的家伙那样直译,而是像徐光启那样,直接看清它的本质是什么。知其变,守其恒,为天下式。当我看到陈意云老师把 coinduction 翻译成「余归纳」的时候,我很困惑:「余」在哪了?而当我发现 coinduction 就是把归纳的过程反过来后,自然就有了它的译法:逆归纳。「反」是一个静态的描述,而「逆」是一个动态的表述。当归纳的箭头有了流动的方向,逆流而上便是把箭头反过来最自然的想法了。于是在英语世界,有了很多关于 co- 的妙语:Q : What does a category theorist call a reader?A : A "co-author".问:范畴论学家把读者称为什么?答:「协作者」。
负负得正,看来 co- 是对合(involution)的。
如果你对知识进行了彻底的分析而非某种机械的套弄,在你脑中生成的概念与生硬的文字之间已经没有很强的相似性,我们就认为这个概念是被理解的。彻底的分析和非凡的变换,是获得真知的标志性特征。
作者:Oling Cat
链接:https://zhuanlan.zhihu.com/p/56285253
得了吧。天下没有一个理论那么简单,理论能涵盖自己,却忘了世界有许多它描述不住的东西。这只是个游戏,情绪自信什么也优化不了 #statement
知其变,领域太多你知不穷,更何谈变化。守其恒,抽象太多涵盖万物等于什么没抽象,抽象徳不配位、言不及义,仍需再优化学习。
从变中得不变,这种一时的欣喜终究是因为接触不够广导致的,它只是发展的第0步。人作为大自然的产物,一种动物,是永远无法获得真理的。
如果你总是自认为彻底理解了知识,你仍在排斥它。因为真正的理解彻底是与之相融,让它成为自己的语言,而不是把它当成独立概念;这个过程和那真知亦无不平凡,只是朝朝暮暮,反复出现,边角不断消磨,本质才得以显现; 一个人一类知识是有时间线的,哪像编译器那样彻底变换 一次成功;得到之后,只是相处的开始。获得真知 只是冷落了真知
"SICP"附近有点好玩的内容,像关于 表述-函数-描述式编程(不过描述式解释器我写过,感觉还是不能实现函数式的功能.. 那就要看 SWI-Prolog.org 啥的能不能用于查询外的功能,应该不能独立存在
duangsuse::Echo
#Rust 的 struct/impl-fn 设计非常好(好像还能作union.. ) ,也支持闭包 std 有一些 box,ref,Vec,Map 的对C++ 习惯也很直接,而且有unsafe 能取代C 值类型&mut和(i8,i8)、流控匹配, FFI 和 Emscripten 也很好 (尽管不如Kt重视语义性 总之和 #Go 这种民科语言是完全不同的,mivik/kamet,rin 都是以rs 为原型(尽管不支持匹配解构) 但是设置环境是要花时间的,如果你的程序就那样,用什么语言其实没必要。 Rust…
👆 😐好了好了不看了,待会相关新文会在这贴链接。
” 如果你对知识进行了彻底的分析而非某种机械的套弄,在你脑中生成的概念与生硬的文字之间已经没有很强的相似性,我们就认为这个概念是被理解的。彻底的分析和非凡的变换,是获得真知的标志性特征。
如果你总是彻底分析理解了知识,你仍在排斥。毕竟将其归为自己的语言、与之相融才能真正实现理解,而非视其作独立概念;学习过程与真知亦无不平凡,只是朝朝暮暮反复出现,边角不断消磨,本质才得以显现。
一个人一类知识有时间线。哪像编译器那样彻底变换、一次成功;得到之后,只是相处的开始。获得真知 只是冷落了真知
文字不该是生硬的。我觉得。 如果作者足够好,概念就不会和文本相差甚远;别忘了 parse 也是种转化、逆语序也是弱相似性,精力全放在表达方式上,会看不见许多更重要的东西。
” 如果你对知识进行了彻底的分析而非某种机械的套弄,在你脑中生成的概念与生硬的文字之间已经没有很强的相似性,我们就认为这个概念是被理解的。彻底的分析和非凡的变换,是获得真知的标志性特征。
如果你总是彻底分析理解了知识,你仍在排斥。毕竟将其归为自己的语言、与之相融才能真正实现理解,而非视其作独立概念;学习过程与真知亦无不平凡,只是朝朝暮暮反复出现,边角不断消磨,本质才得以显现。
一个人一类知识有时间线。哪像编译器那样彻底变换、一次成功;得到之后,只是相处的开始。获得真知 只是冷落了真知
文字不该是生硬的。我觉得。 如果作者足够好,概念就不会和文本相差甚远;别忘了 parse 也是种转化、逆语序也是弱相似性,精力全放在表达方式上,会看不见许多更重要的东西。
Forwarded from Solidot
AI 有望让字幕成为过去
2022-01-20 14:59
观看外国影视剧通常会用到字幕,一则可能是没有当地配音版本,或者配音版本没有达到原版的满意程度。要让原版的演员说不同地方的语言是不可能的事情。如今 AI 技术的进步有望让不可能变成现实:AI 通过训练能使用原版语音合成出逼真的新语音。新语音不再是另一个人的声音,而是演员本人比如汤姆克鲁斯说着另一种语言。这一技术也 引发了音频深度伪造的担忧。AI 公司 Veritone 透露了它开发的名为 MARVEL.ai 的产品,允许内容制作者生成超现实的合成声音。
2022-01-20 14:59
观看外国影视剧通常会用到字幕,一则可能是没有当地配音版本,或者配音版本没有达到原版的满意程度。要让原版的演员说不同地方的语言是不可能的事情。如今 AI 技术的进步有望让不可能变成现实:AI 通过训练能使用原版语音合成出逼真的新语音。新语音不再是另一个人的声音,而是演员本人比如汤姆克鲁斯说着另一种语言。这一技术也 引发了音频深度伪造的担忧。AI 公司 Veritone 透露了它开发的名为 MARVEL.ai 的产品,允许内容制作者生成超现实的合成声音。
#math #plt 公开课. 是仿造数学语言 https://github.com/DSLsofMath/DSLsofMath
Introduction: Haskell, complex numbers, syntax, semantics, evaluation, approximation
Basic concepts of analysis: sequences, limits, convergence, ...
Types and mathematics: logic, quantifiers, proofs and programs, Curry–Howard, ...
Type classes, derivatives, differentiation, calculational proofs
Domain-Specific Languages and algebraic structures, algebras, homomorphisms
Polynomials, series, power series
Power series and differential equations, exp, sin, log, Taylor series, ...
Linear algebra: vectors, matrices, functions, bases, dynamical systems as matrices and graphs
Laplace transform: exp, powers series cont., solving PDEs with Laplace
Introduction: Haskell, complex numbers, syntax, semantics, evaluation, approximation
Basic concepts of analysis: sequences, limits, convergence, ...
Types and mathematics: logic, quantifiers, proofs and programs, Curry–Howard, ...
Type classes, derivatives, differentiation, calculational proofs
Domain-Specific Languages and algebraic structures, algebras, homomorphisms
Polynomials, series, power series
Power series and differential equations, exp, sin, log, Taylor series, ...
Linear algebra: vectors, matrices, functions, bases, dynamical systems as matrices and graphs
Laplace transform: exp, powers series cont., solving PDEs with Laplace
GitHub
GitHub - DSLsofMath/DSLsofMath: Domain-Specific Languages of Mathematics
Domain-Specific Languages of Mathematics. Contribute to DSLsofMath/DSLsofMath development by creating an account on GitHub.
duangsuse::Echo
#math #plt 公开课. 是仿造数学语言 https://github.com/DSLsofMath/DSLsofMath Introduction: Haskell, complex numbers, syntax, semantics, evaluation, approximation Basic concepts of analysis: sequences, limits, convergence, ... Types and mathematics: logic, quantifiers…
#typescript #TT 科普 TypeScript Type-Level Programming - lsdsjy的文章 - 知乎
https://zhuanlan.zhihu.com/p/54182787
TS是支持静态类型的JS。有 number,string 等值,也有常量作 literal type: number, .. "div" "body"..
这个表里[num,str] 是 num|str 的意思,因此若有 P={a:num,b:str} 则 P[keyof P] ,就是并集类型。类同{}类型,
let v:{[K in keyof T]:
子类型中 Int is Num, Num is Num 。is是 <= (never不大与任何类型)的意思,如何实现(=)呢?
这里也以infer语法来引入新的 typevar <U> ,算是某种意义上的“模式匹配”。在Haskl 对 ADT 的值作模式匹配;在这儿,我们对有着“代数类型 类型”的TS类型作模式匹配。
ADT 有普通的函数状 data constructor;Type 也有 type constructor,比如 Promise就是 T->Promise<T>的“类型函数”。它是 lit,list,dict 外第三种组合方法
然后是:
一开始的时候,我把 Coq induction 和数学归纳法搞混了。要用数学归纳法证明一个命题 P,你需要先证明一个基础步骤 P(0),然后在 P(n) 成立的情况下证明一个递推步骤 P(n+1)。但是在 induction 里面没有“基础步骤”和“递推步骤”之分,甚至 induction 产生的小目标的数量都不一定等于2。之后,我发现你可以把 induction 理解成数学归纳法的一种扩展。数学归纳法是作用在自然数上面的,而自然数是一种递归定义的归纳类型:
证明 len_app_plus,就对 s1 进行归纳,因为 String.length 在每次迭代中会消耗字符串的第一个字符。当你对 s1 进行归纳的时候,第二个情况会是 s1 = String char s,这就对应了 String.length 的定义
作者:陈乐群
链接:https://zhuanlan.zhihu.com/p/54164515 能够看出来写得很好,还带FAQ..可对外道入门逻辑式还不够唉
#rust #PLT 自由程续-阴阳谜题 手动脱call/cc解
Rust 阴阳谜题,及纯基于代码的分析与化简 - 知乎用户FGAvTw的文章 - 知乎
https://zhuanlan.zhihu.com/p/52249705
#Python 5行yield解 https://zhuanlan.zhihu.com/p/43207643
如何制造SCP018 - 圆角骑士魔理沙的文章 - 知乎 — 函数式尾调用优化
https://zhuanlan.zhihu.com/p/43163820
形式验证、依赖类型与动态类型 - 老废物千里冰封的文章 - 知乎 讲了 Nullable,静态长Vec,运行时报错的type兼容
https://zhuanlan.zhihu.com/p/50792280
https://zhuanlan.zhihu.com/p/54182787
TS是支持静态类型的JS。有 number,string 等值,也有常量作 literal type: number, .. "div" "body"..
<K extends keyof ElementMap> :R=Map[K] 是入门级子集定义吧!TS里{a:1,b:""} 的类型都是这种表。此外 {[K in keyof T]: } 可作转化这个表里[num,str] 是 num|str 的意思,因此若有 P={a:num,b:str} 则 P[keyof P] ,就是并集类型。类同{}类型,
{[K in KS]: }[KS] 给并集list 作转化let v: (() => void) extends Function的类型是true(lit type). 以下 is=extends
type T={a:num,b:str} //v:{a:Num|never} ,never=kotlin.Nothing |的不动(0值)点let v:{[K in keyof T]:
T[K] is number? T[K] : never }[keyof T] //收集并转换子类型中 Int is Num, Num is Num 。is是 <= (never不大与任何类型)的意思,如何实现(=)呢?
type Equal<T, U> = T is U ? (U is T ? true : false) : false //TS类型上无&& || !TS只支持 recursive mapped types,“递归函数”只能返回 dict。设想 T={xx: T|Promise<U>} ;把T内所有Promise.resolve 的函数类型是啥?
let v: Equal<Func, Function> // v: true //最后一遍:这是编译期可知
type Unwrapped<T> = { [K in keyof T]: T is Promise<infer U> ? U : Unwrapped<T> }
type Unwrap<T> = (wrapped: T) => Unwrapped<T> 这里也以infer语法来引入新的 typevar <U> ,算是某种意义上的“模式匹配”。在Haskl 对 ADT 的值作模式匹配;在这儿,我们对有着“代数类型 类型”的TS类型作模式匹配。
ADT 有普通的函数状 data constructor;Type 也有 type constructor,比如 Promise就是 T->Promise<T>的“类型函数”。它是 lit,list,dict 外第三种组合方法
type:
Nat<N> = Zero | Succ<N>
Zero = void; type Succ<N> = { pred: N } //0, +1
_1 = Succ<Zero>
_2 = Succ<_1>
IsNat<T> = T is Nat<infer N> ? true : false
q1 = IsNat<_2> // true
q2 = IsNat<number> // false
IsNatIsNat = IsNat<IsNat> //err: IsNat require param 然后是:
一开始的时候,我把 Coq induction 和数学归纳法搞混了。要用数学归纳法证明一个命题 P,你需要先证明一个基础步骤 P(0),然后在 P(n) 成立的情况下证明一个递推步骤 P(n+1)。但是在 induction 里面没有“基础步骤”和“递推步骤”之分,甚至 induction 产生的小目标的数量都不一定等于2。之后,我发现你可以把 induction 理解成数学归纳法的一种扩展。数学归纳法是作用在自然数上面的,而自然数是一种递归定义的归纳类型:
Inductive nat : Set :=要证明 len_repeat,我们就要对 n 进行归纳,因为 repeat 是定义在 n 上的一个递归
| O : nat
| S : nat -> nat.
Lemma len_repeat: --n(s rep k)=k*n(s)
forall s n,
String.length (repeat s n) = n * String.length s.
intros s n. induction n
(s rep 0)=0*n(s)—无归纳假设, 下递归定义,有.
(s rep N+1)=(N+1)*n(s)
Lemma len_app_plus: --n(s+s1)=n(s)+n(s1)
forall s1 s2,
String.length (s1 ++ s2) = String.length s1 + String.length s2.
证明 len_app_plus,就对 s1 进行归纳,因为 String.length 在每次迭代中会消耗字符串的第一个字符。当你对 s1 进行归纳的时候,第二个情况会是 s1 = String char s,这就对应了 String.length 的定义
作者:陈乐群
链接:https://zhuanlan.zhihu.com/p/54164515 能够看出来写得很好,还带FAQ..可对外道入门逻辑式还不够唉
#rust #PLT 自由程续-阴阳谜题 手动脱call/cc解
Rust 阴阳谜题,及纯基于代码的分析与化简 - 知乎用户FGAvTw的文章 - 知乎
https://zhuanlan.zhihu.com/p/52249705
#Python 5行yield解 https://zhuanlan.zhihu.com/p/43207643
如何制造SCP018 - 圆角骑士魔理沙的文章 - 知乎 — 函数式尾调用优化
https://zhuanlan.zhihu.com/p/43163820
形式验证、依赖类型与动态类型 - 老废物千里冰封的文章 - 知乎 讲了 Nullable,静态长Vec,运行时报错的type兼容
https://zhuanlan.zhihu.com/p/50792280
知乎专栏
TypeScript Type-Level Programming
TypeScript 有着足够强大(?)的类型系统,我们可以用它做类型层面的编程。首先来看如何在类型层面表达编程的几个要素:数据(广义地指可供编写者操作的所有实体)、操作变换数据的原语和控制流(广义,包括命令…
duangsuse::Echo
#math #plt 公开课. 是仿造数学语言 https://github.com/DSLsofMath/DSLsofMath Introduction: Haskell, complex numbers, syntax, semantics, evaluation, approximation Basic concepts of analysis: sequences, limits, convergence, ... Types and mathematics: logic, quantifiers…
#math 证明 a.rev().rev()=a 。不敢保证准确 但一定不会烧脑,实际上我也没见冰封外的人讲过 #haskell
首先,
是执行原理。 可以先得
首先,
rev (r:xs)=(rev xs)++[r] -- rev[1,2] =r[2]++[1]=r[]++[2]++[1]
((x:xs)++r)=x:(xs++r) --[2]++[1]=[]++[2]++(r=[1])=[2,1] --链表的Nil即[]替换为r
([]++r)=r 是执行原理。 可以先得
x:(rev a)=a+x ,如 b=rev a, 证明 rev b=a 时已知b就是(rev a),可把 x:b=a+x 对应,毕竟 rev 其实也有一种 fold (:) [] 的写法,能做到两边相等s => // x s. rewrite rev_cons. case: (rev s) => [|x1 s1]<- ==至于 x:reva=a+r ,靠 rev(r:xs)=revxs+r 直接是得不出的?,但翻过来 rev(revxs+r) 其实就是原来的 r:xs 首先在 xs+r 位置,然后还原过来 revxs+r=rev(r:xs)
rev_cons (x1 x2 : T) s : (x1::rcons s) x2 = rcons (x1 :: s) x2讲得迷糊是因为我也很迷糊,但,幸好在网上找到了 revrevid.v ,不然就绝对不正确了。因此完整证明(反正也看不懂. 上面链接也讲了rewrite是换个参数来证):
rewrite cons_rcons rev_rcons
Lemma cons_rcons T (x1 x2 : T) s : x1 :: rcons s x2 = rcons (x1 :: s) x2.冰封的“科普文”和上楼类型编码没有区别但对验证更细,之前好像还有构造 &^ 性质,然后可以组织证交换律的,但是集合论参数语法都没说清楚,好像是匹配几个变量换个位置;现在冰封删文了,我也没兴趣管这些。想必喜欢函数式的人也受不了这种逻辑学吧,真的毫无逻辑可循,毕竟等式变形已经完成了, n(s+s1)=ns+ns1 这种特质却不能 forall? 想必对我们这些俗人还是太高深,Coq Idris 等形式验证,它用的集合论我也不知道是咋回事,比<图解范畴论>里高次数范畴还迷糊,只能放弃喽
Proof. done. Qed.
Theorem rev_rev_id T (s : seq T) : rev (rev s) = s.
Proof.
elim: s => // x s. rewrite rev_cons. case: (rev s) => [|x1 s1] <- //=.
rewrite cons_rcons rev_rcons => //=.
Qed.
Forwarded from &'a ::rynco::UntitledChannel (Rynco Maekawa)
Nginx 的核心开发者、公司创始人 Igor Sysolev 决定退出开发。
https://www.nginx.com/blog/do-svidaniya-igor-thank-you-for-nginx/
Igor 坚持在 Nginx 上工作了 20 年,其中有近 10 年都是一个人在开发。他的成果已经成为了现代互联网发展的基石。
https://www.nginx.com/blog/do-svidaniya-igor-thank-you-for-nginx/
Igor 坚持在 Nginx 上工作了 20 年,其中有近 10 年都是一个人在开发。他的成果已经成为了现代互联网发展的基石。
#algorithm UnionFind、三角分形(精简版)
如果要实现 Set 你会怎么做?每次 add(x) 时去重遍历 uniq() 吗?
现在按数组
当加一对 a-b ,把它们的位置赋上彼此,就能知道在不在同集合内——不行,如果还有a-b-c 咋赋值?
答案是 a->b 关联 b->c 再关联,因此 find() 变成链表遍历后最终同一。然后 add(a,c) 先找这个"b",把它->c
最终这个
//给不懂的同学:N是(Map状数组)项个数,up是“父数字” ,eq代表不仅查询还建立a-b 连接关系。 UF算法与up[] 是1:1 ,所以随便起了个o=UF() 数据来功能test
这个相当于List<Set<Int>>
另外 UF,BFS 都是在节点图上判断两点是否联通,如果需要路径则用 DFS ,如从节点 2 的[+3,*3]边怎么走到 "9":
//当然比较hack,如果是专门讲我就会用正经let函数
然后最短路径可以用Dij狄图算法(也可优化权重边),也有A*啥的寻路法。 pip,apt 等依赖工具就是简单BFS可达搜索搞定;我不搞OI懂的不多
#inm 比较喜欢的数字论证生成器可以是这样
https://blog.csdn.net/dm_vincent/article/details/7655764
https://www.cnblogs.com/SeaSky0606/p/4752941.html
还有正经算法解读: https://zhuanlan.zhihu.com/p/63123489
大家可以比比它们的信息量。
—
你要咋画 Xecades大佬的三角分形 (三角内接倒三角,其三边与我顶点继续如此)?
本来是要在中线拿3点(shift遍重组,或者手写配对)和带深度递归的,可看起来只需要
#js #code
就够了。GLSL 里画三角
(不过要画三角分形就会难许多了,而且Xe的游走三角是靠边点累积来的,SL不支持累积..)
可以看出,物理的矢量是非常高明的代码复用,少做了很多结构性的事,却照样实现图形效果,而且更可调参——例如靠点集计算就做不到 ply() 边缘模糊的效果
如果要实现 Set 你会怎么做?每次 add(x) 时去重遍历 uniq() 吗?
现在按数组
Array(N).fill(0).map((x,i)=>i) 实现 Set<Int> 。每位与一个索引关联,初始是和自己当加一对 a-b ,把它们的位置赋上彼此,就能知道在不在同集合内——不行,如果还有a-b-c 咋赋值?
答案是 a->b 关联 b->c 再关联,因此 find() 变成链表遍历后最终同一。然后 add(a,c) 先找这个"b",把它->c
最终这个
Map<Int,Parent=Int> 会变成树状数组,只是不被遍历。UF集也有a-b小size侧优先-> 权重,和max()时顺便合并快查法UF=(N,up=Array(N).fill(0).map((x,i)=>i) )=>(a,b,eq=true)=>{
let max=i=>{for(;i!= (i=up[i]);); return i}, iA=max(a),iB=max(b)
if(eq&&iA!=iB)up[iA]=iB; return eq||iA==iB //不上obj,写不好..
}
let o=UF(3); o(0,1);o(1,2)
o(0,2, false)==true //给不懂的同学:N是(Map状数组)项个数,up是“父数字” ,eq代表不仅查询还建立a-b 连接关系。 UF算法与up[] 是1:1 ,所以随便起了个o=UF() 数据来功能test
这个相当于List<Set<Int>>
另外 UF,BFS 都是在节点图上判断两点是否联通,如果需要路径则用 DFS ,如从节点 2 的[+3,*3]边怎么走到 "9":
dfs=(link,flink,out,chk=(e,e1)=>{let k,k1;if(e==e1)return[]; if(!out(e)) for(k of link){k1=chk/*找!*/(flink(e,k),e1); if(k1)return k1.concat(k) } })=>chk
ten=dfs(["+3","*3"], (a,k)=>eval(a+k), a=>a>10)
ten(2,9)->+3*3 (chk完还应reverse下.)
//当然比较hack,如果是专门讲我就会用正经let函数
然后最短路径可以用Dij狄图算法(也可优化权重边),也有A*啥的寻路法。 pip,apt 等依赖工具就是简单BFS可达搜索搞定;我不搞OI懂的不多
#inm 比较喜欢的数字论证生成器可以是这样
11 = 11*-4+51+4
我找了两个与算法解读比 较差的博文:https://blog.csdn.net/dm_vincent/article/details/7655764
https://www.cnblogs.com/SeaSky0606/p/4752941.html
还有正经算法解读: https://zhuanlan.zhihu.com/p/63123489
大家可以比比它们的信息量。
—
你要咋画 Xecades大佬的三角分形 (三角内接倒三角,其三边与我顶点继续如此)?
本来是要在中线拿3点(shift遍重组,或者手写配对)和带深度递归的,可看起来只需要
#js #code
document.write`<canvas id=eg>`
{
let sq=Math.sqrt, dim=(e,[w,h])=>{e.width=w,e.height=h}
y = Math.min(innerHeight, innerWidth * sq(3) / 2)
g = eg.getContext("2d");
g.fillStyle = "blue";
let P=[[0,y],[y / sq(3),0], [2*y / sq(3),y]],p=[...P[0]] //左顶右
dim(eg,P[2]);dim(eg.style,["100%","100%"])
setInterval(() => {
let j=0,i = Math.random() * 3 >>0
for(;j<2;j++) p[j]=(p[j]+P[i][j])/2 //随机选方向游走
g.fillRect(...p,1,1)
})
}
//g;画布,dim:宽高wh ,sq:三角(点->点)xy距离的计算, j:仿造向量的计算同时应用于xy就够了。GLSL 里画三角
#define v1 float// 这个我没法注释,因为SL图形和数学几何关系大。有的时候看不懂也不是因为故弄玄虚,而是那个领域本身难懂。比如我define v1=float 和rld仨变量变 degRee(不用a因为编程有数组要命名),length,distance 后对第三块代码难度影响不大,因为核心不是浮点有几个字
v1 PI=3.14;
v1 ply(int N,vec2 p){
//多边形. 三角[0,y],[y / sq(3),0], [2*y / sq(3),y] 都没了..
v1 d, TURN=2.*PI;
// space to -1~1.
p = p *2.-1.;
// Angle and radius from the current pixel
v1 r = TURN/float(N);
v1 l = atan(p.x,p.y)+PI;
d = cos(floor(.5+l/r)*r -l)* length(p);//distance-shape
return 1.0-step(.4,d);//也可smoothstep(a,b,v)模糊锐边
}
void mainImage(out vec4 bg, vec2 P){P/=iResolution.xy;
P.x *= iResolution.x/iResolution.y;
bg=vec4(0,0, ply(3,P), 1.);//左中 蓝三角
}
(不过要画三角分形就会难许多了,而且Xe的游走三角是靠边点累积来的,SL不支持累积..)
可以看出,物理的矢量是非常高明的代码复用,少做了很多结构性的事,却照样实现图形效果,而且更可调参——例如靠点集计算就做不到 ply() 边缘模糊的效果
blog.csdn.net
并查集(Union-Find)算法介绍_不忘初心,好好沉淀-CSDN博客_并查集算法
本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,而不是别的什么方法。我觉得这个可能更加有意义一些,相比于记下一些结论。
Forwarded from dnaugsuz
我一直在培养这个,但方向可能和你们有点不一样。准确的说,我就是从你们的命名法和严谨结构/排版过来的
我是用单字符表示用途,但这个定义表(物理命名法)还不知名,也就是说目前只有我能看得ok..
许多程序不是增长命名就能读懂的(比如把x都换成item, 不会增加你对算法思想的理解,只会让你觉得算法的基础操作很“工程”,好像是懂了但也只方便死记)。 在很短的篇幅里,只能说这么多,但有一个长的 introduction 就可以易懂了;但长文章读起来也是费劲的,所以我最终选择保持现状
我是用单字符表示用途,但这个定义表(物理命名法)还不知名,也就是说目前只有我能看得ok..
许多程序不是增长命名就能读懂的(比如把x都换成item, 不会增加你对算法思想的理解,只会让你觉得算法的基础操作很“工程”,好像是懂了但也只方便死记)。 在很短的篇幅里,只能说这么多,但有一个长的 introduction 就可以易懂了;但长文章读起来也是费劲的,所以我最终选择保持现状
duangsuse::Echo
#algorithm UnionFind、三角分形(精简版) 如果要实现 Set 你会怎么做?每次 add(x) 时去重遍历 uniq() 吗? 现在按数组Array(N).fill(0).map((x,i)=>i) 实现 Set<Int> 。每位与一个索引关联,初始是和自己 当加一对 a-b ,把它们的位置赋上彼此,就能知道在不在同集合内——不行,如果还有a-b-c 咋赋值? 答案是 a->b 关联 b->c 再关联,因此 find() 变成链表遍历后最终同一。然后 add(a,c) 先找这个"b",把它…
#haha #inm #bilibili 搜到了几个野兽先辈的自动化工具 😂 (好啊!来啊! 啊!?啊啊啊啊啊!!!)
https://lab.magiconch.com/homo/ 数字论证生成(map:Int,Str 数据集里选最大不大 拼接)
https://wyusagi.github.io/Proof_Yajuu/ 自动迫害机(文字模板)
https://www.cnblogs.com/lcyfrog/p/13181450.html #oi C++ 数字论证cli
https://lab.magiconch.com/homo/ 数字论证生成(map:Int,Str 数据集里选最大不大 拼接)
https://wyusagi.github.io/Proof_Yajuu/ 自动迫害机(文字模板)
https://www.cnblogs.com/lcyfrog/p/13181450.html #oi C++ 数字论证cli
wyusagi.github.io
野兽先辈万能论证机
野兽先辈万能论证机:
然后是王垠质疑相对论这回事,我来谈谈看法。
动机不想猜,他博客就起的“我在扯淡”,当然也有不少内容不是扯淡,尤其是科普和讲故事,比如,写个+-*/带参数吧,尼玛 #zhihu 上函数式的人全给(因为不成熟啦,对自己而言做法过时啦,.)删了,剩下些大学编译原理在parser上磨叽,几百行代码,结果还不如王某人(2012)的好,这个领域国内CS是这个水平; 但一些人觉得因此自己就是大佬了,没有认识到大佬的责任(随他呢,也无法道德绑架),对CS挺可惜,尽管往大说这些也没啥用(未必,你看Babel,TS,Swagger )
但相对论有没有用,或者是不是领域性的骗人,也轮不到外专业的人来批评,首先物理乃至CAD工程界人也不都是用相对论的,包括王垠说的“牛顿真正力学”使用者,他们觉得没问题,那就没其他研究者的事了。 就是物理的一个细节有问题,你能逼所有研究者瞬间换说法或者模型,吃力不讨好,何必呢
物理式表示法不差,改正了数学的很多问题,而物理也是应用学科(数学也分卷和正经的两部分的),与其写这样的阴谋论小作文还不如列公式和实验数据可信点,民科就是天天用语文抨击他不信(也不懂)的理论,都要把语文的名声搞差了,但其实会表达是很有用的,并不是智商高就能做。
以前我只会优化代码排版命名,也不会画图,所以觉得«算法»的代码已经足够好了,现在看来仍有可改的地方呢
现在一些娱乐(学术/工程)界人士编程,
每一句都和“天空是空的,仙人掌是长刺的,空气是摸不着的”一样既准确又废
但是带上稀奇古怪的符号、巨长巨短的名字,“精心设计”不知哪该注目的图示,就变成至理教科书了,名字后加个“代数”。谁有权定义代数?它是有什么技术标准规范,必须写成空洞重复的形式才能叫代数?同样是代数,有些人的式子就很有意义,另一些人就在玩起名游戏,请问代数和名字相关还是和范围、图示这些涵义更相关啊? 总是附庸数学,你懂数学没有? 中国多少人通过高中大学的测试,你在数学上含糊就很牛?
我真的不懂那个思维导图是怎么火起来的,自动排版软件又模糊,排出来的连接最后读着看很麻烦,关键是他们在 presentation(SmartArt..)外的地方以png吹这玩意,还说帮助学习,开课赚钱,看着都困难。 其实思维导图创建起来不困难,读起来本应是有动画和引用,可不知道为什么商业软件就挺散,而且作图者也不会用;现在许多做公众号的圈子会分享这些,也就看一乐呵
动机不想猜,他博客就起的“我在扯淡”,当然也有不少内容不是扯淡,尤其是科普和讲故事,比如,写个+-*/带参数吧,尼玛 #zhihu 上函数式的人全给(因为不成熟啦,对自己而言做法过时啦,.)删了,剩下些大学编译原理在parser上磨叽,几百行代码,结果还不如王某人(2012)的好,这个领域国内CS是这个水平; 但一些人觉得因此自己就是大佬了,没有认识到大佬的责任(随他呢,也无法道德绑架),对CS挺可惜,尽管往大说这些也没啥用(未必,你看Babel,TS,Swagger )
但相对论有没有用,或者是不是领域性的骗人,也轮不到外专业的人来批评,首先物理乃至CAD工程界人也不都是用相对论的,包括王垠说的“牛顿真正力学”使用者,他们觉得没问题,那就没其他研究者的事了。 就是物理的一个细节有问题,你能逼所有研究者瞬间换说法或者模型,吃力不讨好,何必呢
物理式表示法不差,改正了数学的很多问题,而物理也是应用学科(数学也分卷和正经的两部分的),与其写这样的阴谋论小作文还不如列公式和实验数据可信点,民科就是天天用语文抨击他不信(也不懂)的理论,都要把语文的名声搞差了,但其实会表达是很有用的,并不是智商高就能做。
以前我只会优化代码排版命名,也不会画图,所以觉得«算法»的代码已经足够好了,现在看来仍有可改的地方呢
现在一些娱乐(学术/工程)界人士编程,
每一句都和“天空是空的,仙人掌是长刺的,空气是摸不着的”一样既准确又废
但是带上稀奇古怪的符号、巨长巨短的名字,“精心设计”不知哪该注目的图示,就变成至理教科书了,名字后加个“代数”。谁有权定义代数?它是有什么技术标准规范,必须写成空洞重复的形式才能叫代数?同样是代数,有些人的式子就很有意义,另一些人就在玩起名游戏,请问代数和名字相关还是和范围、图示这些涵义更相关啊? 总是附庸数学,你懂数学没有? 中国多少人通过高中大学的测试,你在数学上含糊就很牛?
我真的不懂那个思维导图是怎么火起来的,自动排版软件又模糊,排出来的连接最后读着看很麻烦,关键是他们在 presentation(SmartArt..)外的地方以png吹这玩意,还说帮助学习,开课赚钱,看着都困难。 其实思维导图创建起来不困难,读起来本应是有动画和引用,可不知道为什么商业软件就挺散,而且作图者也不会用;现在许多做公众号的圈子会分享这些,也就看一乐呵
重构 https://alemangui.github.io/pizzicato/ 的代码简直是种折磨,我鸽了3,4天了(当然也是因为天气凉和频道更新。 最开始是想作为WebAudio的练手,的难度下降版,,,) 没想到在我解决人脸识别和画布几何扭曲算法后, 这个东西卡了我很长时间……
你们不知道……🤪 我原以为声音好听=代码好看,没想到这个作者纯纯就是前端,勉强写了个player UX ,全TM是 getByID 拿{} 去传.. 真的还不比我们班同学的复制粘贴。 menu 和article的结构大量重复倒不说, sound-effect 的顺序在网页、snd,effect 侧有三种,而每effect 又有参数,要传全是Element的配置{} ,4种顺序..天哪,真不知道为了一个 presentation page 怎么会如此大费周章唉
前些天我好容易把 snd-effect 给zip 起来,原计划是尽量保留原有结构(#-id我都保留了..) 最后这个UX的中间对象可能模仿不了他 😂,我再也忍不了他这个代码了
你们不知道……🤪 我原以为声音好听=代码好看,没想到这个作者纯纯就是前端,勉强写了个player UX ,全TM是 getByID 拿{} 去传.. 真的还不比我们班同学的复制粘贴。 menu 和article的结构大量重复倒不说, sound-effect 的顺序在网页、snd,effect 侧有三种,而每effect 又有参数,要传全是Element的配置{} ,4种顺序..天哪,真不知道为了一个 presentation page 怎么会如此大费周章唉
前些天我好容易把 snd-effect 给zip 起来,原计划是尽量保留原有结构(#-id我都保留了..) 最后这个UX的中间对象可能模仿不了他 😂,我再也忍不了他这个代码了
duangsuse::Echo
重构 https://alemangui.github.io/pizzicato/ 的代码简直是种折磨,我鸽了3,4天了(当然也是因为天气凉和频道更新。 最开始是想作为WebAudio的练手,的难度下降版,,,) 没想到在我解决人脸识别和画布几何扭曲算法后, 这个东西卡了我很长时间…… 你们不知道……🤪 我原以为声音好听=代码好看,没想到这个作者纯纯就是前端,勉强写了个player UX ,全TM是 getByID 拿{} 去传.. 真的还不比我们班同学的复制粘贴。 menu 和article的结构大量重复倒不说,…
我说大点吧,他这个Pizz icato 看起来很厉害听着也不错,但最终只是 sound source->effect 的单向连接,做成UI 最多整成处理mp3和input getUserMedia 的多声效(GainNode)“配置面板”,这是表现力的极限了。那个生成random()白噪声 和sinewave啥的根本没用处,作者理解不了 WebAudio 为何是基于 AudioNode connect().connect 的吧……看他这个产品页 这还值1.4k star ,真的我不想看pz.js的代码到底长啥样,肯定是一大堆复制粘贴,把我的好印象都破坏了,根 Howler.js 一样
作者根本没想好就开始暴露API了,包络(参数动画) attach/release 开始加在SoundSource上,后来许多又没有此属性,除了 masterVolume 还创建一个 淡入淡出GainNode 去做切换.. 我思量着混音器也不是这么用的啊。 不过它的每个特效都有音量(这时倒可配置起来了,然而特效不支持fade hhh ,节点都用上了 请问 source.volumeGain 和 source.eff[0].volGain 有区别吗)
其实没糟蹋 WebAudio 的项目有很多,比如 p5js.org 和 wavesurfer-js.org ,一看就知道绝对不是喜欢跨文件复制粘贴的人做得到的 :sob
感觉作者真是有把这个项目当项目做,可是他的HTML真的令我十分头痛啊…… 重构期我都产生700行待改代码和3,4个JSON了,不过我把那个滑条配置默认区间 用函数简化了,算是积累点观察法经验;但是看这种代码真的心累…… 🦀
https://okazari.github.io/Rythm.js/ 创意不错
https://github.com/stewdio/beep.js 只有键盘API.
https://github.com/gridsound/daw GS-工作台 和可视化编程 https://noisecraft.app/browse , https://github.com/surikov/webaudiofont 和 audiotool.com 厉害
https://preziotte.com/partymode/ 巨赞的可视化 #signal
https://github.com/rserota/wad#showcase https://github.com/Theodeus/tuna 太虚
http://slang.kylestetz.com/ 编程语言最糟的用途
https://howlerjs.com/ 其实还不错.. 支持分段和3D位置
https://github.com/collab-project/videojs-record 录屏录音
wad和tuna 是啥玩意, bbc/peaks波形是咋..打不开
作者根本没想好就开始暴露API了,包络(参数动画) attach/release 开始加在SoundSource上,后来许多又没有此属性,除了 masterVolume 还创建一个 淡入淡出GainNode 去做切换.. 我思量着混音器也不是这么用的啊。 不过它的每个特效都有音量(这时倒可配置起来了,然而特效不支持fade hhh ,节点都用上了 请问 source.volumeGain 和 source.eff[0].volGain 有区别吗)
其实没糟蹋 WebAudio 的项目有很多,比如 p5js.org 和 wavesurfer-js.org ,一看就知道绝对不是喜欢跨文件复制粘贴的人做得到的 :sob
感觉作者真是有把这个项目当项目做,可是他的HTML真的令我十分头痛啊…… 重构期我都产生700行待改代码和3,4个JSON了,不过我把那个滑条配置默认区间 用函数简化了,算是积累点观察法经验;但是看这种代码真的心累…… 🦀
https://okazari.github.io/Rythm.js/ 创意不错
https://github.com/stewdio/beep.js 只有键盘API.
https://github.com/gridsound/daw GS-工作台 和可视化编程 https://noisecraft.app/browse , https://github.com/surikov/webaudiofont 和 audiotool.com 厉害
https://preziotte.com/partymode/ 巨赞的可视化 #signal
https://github.com/rserota/wad#showcase https://github.com/Theodeus/tuna 太虚
http://slang.kylestetz.com/ 编程语言最糟的用途
https://howlerjs.com/ 其实还不错.. 支持分段和3D位置
https://github.com/collab-project/videojs-record 录屏录音
wad和tuna 是啥玩意, bbc/peaks波形是咋..打不开
GitHub
GitHub - stewdio/beep.js: Beep is a JavaScript toolkit for building browser-based synthesizers.
Beep is a JavaScript toolkit for building browser-based synthesizers. - stewdio/beep.js
duangsuse::Echo
我是这么“保持原汁原味”的……现在看来可真傻 😂早知道会坚持不下去,依然在重复
修好了。这是我第一次重构1.4k star 的项目,也应该是我最后一次“保留原项目风格”…… 复制堆砌 此言不虚 (吐槽: 代码里我无数次用 ()=> 和 ... 以及for() 简化重复 还叫没改风格,非得在Node上才叫改? 😳
(反驳:要是我的JS项目绝对不会出现一整块 o[k]=o[k1] 的代码,早换Obj.assign 乃至列表chunk(2):kv了,可这是 production readily ,要条理清晰.. (被打死
动苏甘拜下风,我对这种代码的维护经验还是不够的…自认写不出同时往HTML .menu,article 和JS里的3个部分里粘贴的,当你添加一个 example ,要改动3文件6位置..
亲爱的各位订户,各种层面上这样的代码,你们今天写了吗?(逃 🙊
(反驳:要是我的JS项目绝对不会出现一整块 o[k]=o[k1] 的代码,早换Obj.assign 乃至列表chunk(2):kv了,可这是 production readily ,要条理清晰.. (被打死
动苏甘拜下风,我对这种代码的维护经验还是不够的…自认写不出同时往HTML .menu,article 和JS里的3个部分里粘贴的,当你添加一个 example ,要改动3文件6位置..
亲爱的各位订户,各种层面上这样的代码,你们今天写了吗?(逃 🙊
duangsuse::Echo
#python #code #telegram #tool 修正tg desktop 的复制成员名太长
我开始讨厌学校里照本宣科了,如果不是因为不熟悉 #JavaScript 这种「动态语言」,怎么会写出如此执掌的代码……我太阳
学校的JS理应把重点,首先让他们写 deep copy 和 deep eq 之类熟悉{} 然后再科普ES6新语法,以及Babel,TypeScript 在完全无需考虑兼容这回事
DOM最少也要把 innerHTML 和 Text 的区别教了,别只AJAX下载html,省得一些人文H不分
学校的JS理应把重点,首先让他们写 deep copy 和 deep eq 之类熟悉{} 然后再科普ES6新语法,以及Babel,TypeScript 在完全无需考虑兼容这回事
DOM最少也要把 innerHTML 和 Text 的区别教了,别只AJAX下载html,省得一些人文H不分
Forwarded from dnaugsuz
如何看待V2EX未经允许公布用户邮箱和手机号? - Sion Kazama的回答 - 知乎 #隐私 #net #china
https://www.zhihu.com/question/270687757/answer/355878537
https://www.zhihu.com/question/270687757/answer/355878537
Forwarded from Solidot
AI 将伦勃朗的杰作转化成 5.6TB 数据
2022-01-21 19:16
伦勃朗的《夜巡》的高分辨率图像现在已上网。容量为 7170 亿像素,分辨率为 0.0005 毫米。阿姆斯特丹国立博物馆发布了一张由人工智能构建的、伦勃朗《夜巡》的超高分辨率图像。原作长近 15 英尺,高超过 12 英尺,自 1900 年代初以来一直在密集地进行修复。新数字图像实际上已根据历史记录重建了多年来被破坏的部分。
2022-01-21 19:16
伦勃朗的《夜巡》的高分辨率图像现在已上网。容量为 7170 亿像素,分辨率为 0.0005 毫米。阿姆斯特丹国立博物馆发布了一张由人工智能构建的、伦勃朗《夜巡》的超高分辨率图像。原作长近 15 英尺,高超过 12 英尺,自 1900 年代初以来一直在密集地进行修复。新数字图像实际上已根据历史记录重建了多年来被破坏的部分。