【发布时间】:2012-04-12 06:24:19
【问题描述】:
This post 标识了我要禁用的“功能”。
当前的 numpy 行为:
>>> a = arange(10)
>>> a[a>5] = arange(10)
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3])
这是一个问题的原因:假设我希望一个数组在断点的任一侧都有两组不同的值(例如,用于制作“破幂律”或其他一些简单的分段函数)。我可能不小心做了这样的事情:
>>> x = empty(10)
>>> a = arange(10)
>>> x[a<=5] = 0 # this is fine
>>> x[a>5] = a**2 # this is not
# but what I really meant is this
>>> x[a>5] = a[a>5]**2
第一个行为,x[a>5] = a**2 产生了一些我认为违反直觉的东西 - 左侧和右侧形状不一致 并且 右侧不是标量,但 numpy 让我做这个分配。正如在另一篇文章中指出的那样,x[5:]=a**2 是不允许的。
所以,我的问题是:有什么方法可以让x[a>5] = a**2 提出Exception 而不是执行任务?我非常担心我的代码中隐藏了拼写错误,因为我以前从未怀疑过这种行为。
【问题讨论】:
标签: numpy