小编kjo*_*kjo的帖子

什么是"画笔"?

文档向右走成使用"刷" API而没有描述什么是"刷"是的细节.

当然,我可以根据该页面中给出的示例进行自己的教育猜测,但我正在寻找一个更为正式的介绍"画笔"的内容.

(搜索"画笔",甚至是"画笔"和"图形"等组合,对我来说效果不是很好,因为术语"画笔"已广泛用于图形软件领域,以表示完全不同的东西(例如AI的刷子形状等).)

特别是,我想知道:"刷"特定于d3.js的术语,还是特定于d3.js的特定想法?另外,什么是"刷子"有用?而且它们是什么不是好?(也许我比平均值更密集,但我没有发现d3.js网站中给出的无字的例子对这些问题特别有帮助.)

brush d3.js

10
推荐指数
1
解决办法
490
查看次数

Python中的自动增长列表?

我需要一个类似列表的对象,只要访问大于或等于其长度的插槽号就会"自动增长",用一些预先指定的默认值填充所有新创建的插槽.例如:

# hypothetical DefaultList class
x = DefaultList(list('abc'), default='*')
x[6] = 'g'
print x[2], x[4], x[6], x[8]  # should print 'c * g *'
Run Code Online (Sandbox Code Playgroud)

谢谢!

PS.我知道实现这样的课程并不困难,但我尽可能避免轮胎改造,特别是如果一个特别有效/精心设计的轮子已经存在的话.

PS2.dict(或collections.defaultdict)不是所需数据结构的可接受实现.为什么,请看这里:http://groups.google.com/group/comp.lang.python/msg/bcf360dfe8e868d1?hl = en

python list

9
推荐指数
1
解决办法
419
查看次数

如何在Python中测试"任何深度的不变性"?

我将Python对象定义为"在任何深度都是不可变的"iff

  1. 它(名义上)是不可改变的;
  2. 如果它是一个"容器"对象,那么它只包含"在任何深度都是不可变的"对象;

例如((1, 2), (3, 4)),在任何深度都是不可变的,而((1, 2), [3, 4])不是(尽管后者,由于是一个元组,"名义上"是不可变的).

有没有合理的方法来测试Python对象是否"在任何深度都是不可变的"?

测试第一个条件相对容易(例如使用collections.Hashable类,忽略了不正确实现__hash__方法的可能性),但第二个条件更难以测试,因为"容器"对象的异质性,以及迭代他们的"内容"......

谢谢!

python nested immutability hashable

9
推荐指数
1
解决办法
515
查看次数

如何获取调用当前正在执行的函数的模块?

到目前为止,这是我从函数中访问调用模块的问题的最佳解决方案:

import inspect
import sys
def calling_module(level=0):
    filename = inspect.stack()[level+2][1]
    modulename = inspect.getmodulename(filename)
    try:
        return sys.modules[modulename]
    except KeyError:
        return sys.modules['__main__']
Run Code Online (Sandbox Code Playgroud)

......但是在处理中隐含的KeyError是(基本上没有根据的)假设它只有在filename被运行时才会发生__main__.

Python标准库是否提供了更强大的方法来执行此操作?

python introspection

9
推荐指数
1
解决办法
963
查看次数

`accumarray`对其函数参数进行异常调用

精简版:

作为第四个参数传递的函数accumarray有时会被调用,其参数与编写第一个参数的规范不一致accumarray.

因此,用作参数的函数accumarray必须测试实际上是异常条件的内容.

问题是:如何对这种异常条件进行1表达式匿名函数测试?更一般地说:如何编写对accumarray未记录的行为具有鲁棒性的匿名函数?


完整版本:

下面的代码是我今天大部分工作日的问题的彻底提炼版本.

首先是一些定义:

idxs = [1:3 1:3 1:3]';

vals0 = [1   4 6   3 5 7   6 Inf 2]';
vals1 = [1 Inf 6   3 5 7   6   4 2]';

anon = @(x) max(x(~isinf(x)));
Run Code Online (Sandbox Code Playgroud)

注释vals1vals0通过交换元素2和8获得的."匿名"函数anon计算其输入的非无限元素中的最大值.

鉴于这些定义,下面两个调用

accumarray(idxs, vals0, [], anon)
accumarray(idxs, vals1, [], anon)
Run Code Online (Sandbox Code Playgroud)

其区别仅在于在其第二个参数(vals0VS vals1)时,应产生相同的结果,因为之间的差vals0vals1只影响在该参数的值与所述呼叫的一个排序anon,并且该函数的结果是不敏感的排序其论点中的元素.

事实证明,这两个表达式中的第一个正常评估并产生正确的结果1:

>> accumarray(idxs, vals0, …
Run Code Online (Sandbox Code Playgroud)

matlab accumarray

9
推荐指数
2
解决办法
322
查看次数

如何测试最近足够的MATLAB版本?

我想要实现的函数需要知道当前版本的MATLAB是否至少与最近一样R2014a.

是否有一种强大的,受支持的方式来执行此检查?

("强大,支持"我的意思是说我对脆弱的黑客不感兴趣,例如解析版本返回的字符串等)


BTW,在这种情况下,我想要这个检查的原因是知道我可以使用该功能matlab.lang.makeUniqueStrings.如果有一种强大的,受支持的方式来检查此函数的可用性,我会使用它而不是测试当前的MATLAB是否足够新.不幸的是,似乎没有这样的检查:exist对每个变量返回false我可以为此函数的名称提出.再一次,我可以想到脆弱的黑客来模仿正确的测试(例如which('matlab.lang.makeUniqueStrings')),但它们并不比我上面提到的版本测试黑客好.

我发现的最佳解决方案是matlab.lang.makeUniqueStringstry-catch块内运行命令.这仍然是一个脆弱的黑客,因为MATLAB它没有提供强大的内置方式来捕获特定的异常!

IOW,这就是选择最糟糕的黑客.测试当前版本是否足够新(即使这个测试是一个脆弱的黑客)至少具有足够通用的优点,以坚持某些功能,并至少包含脆弱,hacky代码的扩散.

matlab

9
推荐指数
2
解决办法
2928
查看次数

如何在迭代选择时访问"this"的"previous sibling"?

在下面的代码中,假设$sel是一些任意的 d3.js选择:

$sel.each(function(d, i, j) {
              var prev = ??? ;
              ...
          });
Run Code Online (Sandbox Code Playgroud)

我可以替换???分配给prev前一个兄弟this组成的d3.js选择(如果存在的话)?

(如果this是第一个孩子,因此没有先前的兄弟,应该分配一个空的d3.js选择prev.)

d3.js

9
推荐指数
1
解决办法
4725
查看次数

如何在JavaScript(或jQuery)中实现自定义广播事件?

我想实现一个可以"广播"的自定义事件,而不是发送到特定目标.只有那些已将自己注册为此类事件的侦听器的元素才会收到它们.

我的想法如下.

首先,在代码的不同位置,会有表单的陈述

some_subscriber.on_signal( 'some_signal', some_handler );
Run Code Online (Sandbox Code Playgroud)

我正在使用这个术语signal作为"广播事件"的简写.在上面的表达式中some_subscriber,通过为它提供一个处理程序,将自身注册为这种信号的一种类型(称为"some_signal")的监听器.

在代码的其他地方,会有表格的陈述

publisher.signal_types[ 'some_signal' ].broadcast( event_data );
Run Code Online (Sandbox Code Playgroud)

当执行这些语句时,会生成一个新事件并" 广播 ".我的意思是,调用该broadcast方法的代码没有关于它发出的信号的侦听器的直接信息.


我已经实现这个想法的草图在此的jsfiddle,主要是为了说明我用文字描述的上述1.(它肯定不是生产级的,我不是特别相信它可以这么做.)

该实现的关键要素如下.首先,发布者对象不会跟踪他们的订阅者,这可以在这种发布者的工厂方法的实现中看到,如下所示:

function make_publisher ( signal_types ) {

    // ...

    var _
    ,   signal = {}
    ,   ping = function ( type ) {
                   signal[ type ].broadcast( ... );
               }
    ;

    signal_types.forEach( function ( type ) {
                             signal[ type ] = $.register_signal_type( type );
                         } );

    return { signal_types: signal_types, ping: …
Run Code Online (Sandbox Code Playgroud)

javascript jquery events broadcast javascript-events

9
推荐指数
1
解决办法
2万
查看次数

用于设置最低n位的表达式,即使n等于字大小也能工作

注意:这个问题的目的是更好地理解Perl的按位运算符.我知道计算下面描述的数字U的方法.

我们$i是一个非负整数.我正在寻找一个简单的表达式E<$i>1,它将评估为无符号整数 U,其$i最低位全为1,其余位均为0.例如,E<8>应该是255.特别是,如果$i等于机器的字长(W),则E<$i>应该等于~02.

表达式(1 << $i) - 1~(~0 << $i)两者都做正确的事情,除非$i等于W,在这种情况下它们都采用值0,而不是~0.

我正在寻找一种不需要先计算W的方法.


编辑:好的,我想到了一个丑陋,沉闷的解决方案

$i < 1 ? 0 : do { my $j = 1 << $i - 1; $j < $j << 1 ? ( $j << 1 ) - 1 : ~0 } …
Run Code Online (Sandbox Code Playgroud)

perl

9
推荐指数
1
解决办法
85
查看次数

如何保持`[<-`无副作用?

我刚刚发现它`[<-`可能具有破坏性的副作用,或者取决于它给出的参数.

x <- 1:5
x
# [1] 1 2 3 4 5
`[<-`(x, 1:5, 1)
# [1] 1 1 1 1 1
x
# [1] 1 2 3 4 5  # ? last application of `[<-` was non-destructive
`[<-`(x, 1:5, TRUE)
# [1] 1 1 1 1 1
x
# [1] 1 1 1 1 1  # ? the last application of `[<-` had a destructive side-effect
Run Code Online (Sandbox Code Playgroud)

问:是否有一个普遍可靠地防止破坏性的行为,或反对它至少后卫呢?(简而言之,`[<-`完全避免.)


笔记

  1. 我无法在文档( …

r side-effects

9
推荐指数
0
解决办法
97
查看次数