我不明白这个:
CL-USER> (let ((x 'huh?)) (cons (boundp 'x) x))
(NIL . HUH?)
Run Code Online (Sandbox Code Playgroud)
我预计在let上面的表达式中,x将被绑定,因此整个表达式将被计算为(t . huh?)。否则,如果(与我的期望相反)x没有绑定在let的主体中,那么至少上面表达式的求值会导致错误(因为我将一个未绑定的变量作为第二个参数传递给cons)。
更让我困惑的是,Common Lisp HyperSpec 的描述是boundp 这样的:
如果符号已绑定,则返回 true;否则,返回 false。
...其中“bound”一词超链接到该术语表定义(我的重点)1:
bound adj.,vt 1. adj. 束缚的。在绑定中具有关联的表示。 “let 命名的变量绑定在其主体内。”请参阅 unbound。2. adj. 形容词 具有遮蔽[2]另一个的本地绑定。“变量print-escape在 princ 函数中被绑定。” 3. vt 绑定的过去时。
此外,CLHS 的文档说明let了以下内容(我的重点):
...所有变量varj都绑定到相应的值;...
当然,HyperSpec 的页面boundp(我之前已经链接到了)也有以下示例:
(let ((x 2)) (boundp …Run Code Online (Sandbox Code Playgroud) 我希望能够从一个非常干净的平板运行MATLAB :没有历史记录,没有快照,没有自定义,没有.更好的是,我希望能够在一个人刚开始安装MATLAB 的状态下启动一个MATLAB会话.这可能吗?
(当然,我正在寻找一种解决方案,不要求我从我的硬盘上删除每一条MATLAB [如果没有重新格式化驱动器可能无法完成],然后在其中重新安装一个新的MATLAB副本.)
FWIW,我正在运行7.11.0 R2010b.(到目前为止,我在网上找到的令人震惊的罕见/神秘的解决方案不适用于此版本.)
谢谢!
假设一个函数spam有签名spam(ham=None).下面的三个调用都会导致局部变量ham的spam名字空间中有值None:
spam()
spam(None)
spam(ham=None)
Run Code Online (Sandbox Code Playgroud)
如何spam找出实际使用这三种替代品中的哪一种?
我的问题的简要版本是:
怎样才算"最佳实践"的决定时,浮点数
x和Math.round(x)可被视为平等的,允许从浮点运算的精度损失?
啰嗦的版本是:
我经常需要决定给定的浮点值x是否应该被视为"整数",或者更迂腐,应该"被视为整数的浮点表示".
(例如,如果n是整数,则为数学表达式
log 10(10 n)
是一种表示相同整数n的复杂方式.这是一种思维,可以说类似浮点计算的结果可以被视为"整数的表示".)
每当Math.round(x) == x评估时,决策都很容易true:在这种情况下,我们可以说x确实是(整数的浮点表示).
但是Math.round(x) == x当它评估时,测试是不确定的false.例如,
function log10(x) { return Math.log(x)/Math.LN10; }
// -> function()
x = log10(Math.pow(10, -4))
// -> -3.999999999999999
Math.round(x) == x
// -> false
Run Code Online (Sandbox Code Playgroud)
编辑:我经常看到的一个"解决方案"就是选择一些任意的容差? = 1e-6,然后进行测试Math.abs(Math.round(x) - x) < ?.我认为这样的解决方案会产生比我认为更可接受的误报.
javascript floating-point precision equality floating-point-precision
[此帖子的早期版本标题不正确:“如何在一列numpy记录中添加一列?” 问的问题在标题前面已经部分回答了,但这个答案是不太什么身体的这个帖子较早版本要求。我重新命名了标题,并对其进行了实质性的编辑,以使区别更加清晰。我还解释了为什么我前面提到的答案不符合我的期望。]
假设我有两个numpy数组x和y,每个数组由r个 “ record”(也称为“结构化”)数组组成。设xbe 的形状为(r,c x)和ybe 的形状为(r,c y)。我们还假设x.dtype.names和之间没有重叠y.dtype.names。
例如,对于r = 2,c x = 2,c y = 1:
import numpy as np
x = np.array(zip((1, 2), (3., 4.)), dtype=[('i', 'i4'), ('f', 'f4')])
y = np.array(zip(('a', 'b')), dtype=[('s', 'a10')])
Run Code Online (Sandbox Code Playgroud)
我想“水平”连接x并y产生形状为(r,c x + …
什么是Postgres 8.4.8相当于
DO $$
BEGIN
IF NOT EXISTS (...) THEN
EXECUTE ...;
END IF;
END; $$;
Run Code Online (Sandbox Code Playgroud)
?
有没有一种简单的方法来模仿脚本中-l命令行开关的效果perl?(当然,我总是可以chomp每行,然后在我打印的每一行上附加"\n",但重点是避免必须这样做.)
我正在移植一些很大程度上依赖于延迟评估的Python代码.这是通过thunks完成的.更具体地说,任何<expr>需要延迟评估的Python表达式都包含在Python"lambda表达式"中,即lambda:<expr>.
AFAIK,最接近的JavaScript等价物function(){return <expr>}.
由于我正在使用的代码绝对充斥着这样的thunk,我想让它们的代码更加简洁,如果可能的话.这样做的原因不仅在于保存字符(当涉及到JS时不可忽略的考虑因素),而且还使代码更具可读性.要了解我的意思,请比较此标准JavaScript表单:
function(){return fetchx()}
Run Code Online (Sandbox Code Playgroud)
同
\fetchx()
Run Code Online (Sandbox Code Playgroud)
在第一种形式中,实质性信息,即表达fetchx(),在印刷中被周围的function(){return...... 掩盖}.在第二种形式1中,只有一个(\)字符用作"延迟评估标记".我认为这是最佳方法2.
AFAICT,此问题的解决方案将分为以下几类:
eval模拟延迟评价.我对听到最后三个类别的回答特别感兴趣.
PS:我知道使用eval(上面的选项1)在JS世界中被广泛弃用,但是,FWIW,下面我给出了这个选项的玩具插图.
我们的想法是定义一个私有包装类,其唯一目的是将纯字符串标记为用于延迟评估的JavaScript代码.然后使用具有短名称的工厂方法(例如C,用于"CODE")来减少例如,
function(){return fetchx()}
Run Code Online (Sandbox Code Playgroud)
至
C('fetchx()')
Run Code Online (Sandbox Code Playgroud)
首先,工厂C和辅助函数的定义maybe_eval:
var C = (function () {
function _delayed_eval(code) { this.code = code; }
_delayed_eval.prototype.val = function () { return eval(this.code) };
return function (code) { …Run Code Online (Sandbox Code Playgroud) reshape可以创建0-by-1矩阵和1-by-0矩阵:
>> reshape([], [0 1])
ans =
Empty matrix: 0-by-1
>> reshape([], [1 0])
ans =
Empty matrix: 1-by-0
Run Code Online (Sandbox Code Playgroud)
reshape也可以为n > 2 创建一个n维数组,其中至少有一个维度为0.例如1
>> reshape([], [6 0 1 2 1])
ans =
Empty array: 6-by-0-by-1-by-2
Run Code Online (Sandbox Code Playgroud)
但我没有设法哄骗reshape生产0-by-0 任何东西(矩阵或数组,即).例如
>> reshape([], [0 0])
ans =
[]
>> reshape([], [0 0 1])
ans =
[]
Run Code Online (Sandbox Code Playgroud)
有没有办法生成MATLAB以交互方式显示为0-by-0矩阵的实体?
更好的是,有没有办法创建一个实体,MATLAB将以交互方式显示为m- by- n数组,对于任何非负整数m和 …
基本上,我正在寻找一个概括flipud和fliplr翻转nd-array的第i维.
当要翻转的尺寸是第一个时,我想我可以使用
function flipped = flipfirst(ndarr)
sz = size(ndarr);
flipped = reshape(flipud(reshape(ndarr, sz(1), [])), sz);
end
Run Code Online (Sandbox Code Playgroud)
同样,如果要翻转的维度是最后一个,我可以使用
function flipped = fliplast(ndarr)
sz = size(ndarr);
flipped = reshape(fliplr(reshape(ndarr, [], sz(end))), sz);
end
Run Code Online (Sandbox Code Playgroud)
我确信我可以编写更通用的代码,通过调用permute和诸如此类的东西,但是有什么内置的吗?
我不确定reshape上面所有的内容是多么昂贵,但如果是的话,我也会对更有效的非内置方法感兴趣.
matlab ×3
javascript ×2
python ×2
common-lisp ×1
equality ×1
numpy ×1
perl ×1
postgresql ×1
precision ×1
recarray ×1
thunk ×1