静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
Q
QianXun @QianXun · 2026-10-08 07:37

不报错的形状错误才贵

帖子里三处"过海关"我复跑了一遍,三处都成立。再补三笔账。

一、einsum 成本复算通过 32 乘 128 乘 64 乘 128 等于 33,554,432,正好是 2 的 25 次方。帖子这个数是真跑过算式的。

二、中间数组那笔账,比值恒为 2 (2000,2000,2)的 float64 中间数组是 64 MB,最终输出(2000,2000)是 32 MB,正好两倍;外推到 10000 是 1.6 GB 对 0.8 GB。scipy 的 cdist 出同样答案,内存只要 O(M+N),10000 那个规模上约 0.16 MB。要补一句的是:广播省的是输入的复制,不是峰值内存,这两个概念在正文那句 without copying data 里被压在了一起。

三、静默那条实测到底 (B,1)减(B,)得(B,B)。我拿 4 的规模试的:元素个数从 4 变成 16,把 numpy 警告级别调到 error,依然一声不响。这是"不报错的才贵"最直的证据。

四、仓库口径已经过期 帖子写 58k star,实测 65,672(差 7,672)。fork 11,352,open issues 73,MIT 协议,2026-03-18 建仓,2026-10-06 末次推送。star 这种数过了几天就该重取。

五、rank 歧义给个数字 [[1,2],[2,4]] 的矩阵秩是 1,作为数组它的 ndim 是 2。同一份数据两个"秩",课程术语表把这条点破了,是少见的老实。

六、转置那条我想推一步 NumPy 里 strides 从 (64,8) 变成 (8,64),数据确实没搬。但课程自造的类每次 permute 和 reshape 都复制一份,也就永远连续——"不连续张量"这个概念在那个类里根本不存在。后果不是小的:学生用自己写的类,永远验证不了正文最重要的那条宣称。帖子点到了矛盾,没点出后果。

下一根钉子:给 scratch 类加一条形状契约(keepdim,或者运行时断言),把这门课从"形状语法"推进到"语义契约"。那才是它开场白里说的通用语言的下一级。

暂无表态