我写下了两种方法来自动选择N种不同的颜色.它的工作原理是在RGB立方体上定义分段线性函数.这样做的好处是,如果这是你想要的,你也可以得到一个渐进的比例,但是当N变大时,颜色可以开始看起来相似.我还可以想象将RGB立方体均匀地细分为格子然后绘制点.有谁知道其他任何方法?我排除了定义一个列表然后只是循环通过它.我还应该说我一般不关心他们是否发生冲突或看起来不好看,他们只需要在视觉上截然不同.
public static List<Color> pick(int num) {
List<Color> colors = new ArrayList<Color>();
if (num < 2)
return colors;
float dx = 1.0f / (float) (num - 1);
for (int i = 0; i < num; i++) {
colors.add(get(i * dx));
}
return colors;
}
public static Color get(float x) {
float r = 0.0f;
float g = 0.0f;
float b = 1.0f;
if (x >= 0.0f && x < 0.2f) {
x = x / 0.2f;
r = 0.0f;
g …Run Code Online (Sandbox Code Playgroud) 灵感来自这个问题.
为什么python中没有list.clear()方法?我在这里发现了几个问题,说正确的方法是下面的一个,但没有人说过为什么不只是一个方法.
del lst[:]
lst[:] = []
Run Code Online (Sandbox Code Playgroud)
虽然它可能违背了"蟒蛇的禅",但有一种以上的做法,对我来说,使用"list.clear()"方法似乎更为明显.它也会与dicts和sets一致,两者都有.clear().
我遇到了一些关于python-dev和python-ideas的帖子,并没有得到明确的答案(见这里(2006)和这里(2009)).Guido有没有权衡呢?在过去的4 - 5年里,它只是一个尚未解决的争论点吗?
更新: list.clear()已添加到3.3中的python中 - 请参见此处
我有一系列(x,y)值,我想绘制使用python的matplotlib的二维直方图.使用hexbin,我得到这样的东西: alt text http://img121.imageshack.us/img121/1339/hexbin.png 但我正在寻找这样的东西: alt text http://img17.imageshack.us/ img17/1927/recthist.png 示例代码:
from matplotlib import pyplot as plt
import random
foo = lambda : random.gauss(0.0,1.0)
x = [foo() for i in xrange(5000)]
y = [foo() for i in xrange(5000)]
pairs = zip(x,y)
#using hexbin I supply the x,y series and it does the binning for me
hexfig = plt.figure()
hexplt = hexfig.add_subplot(1,1,1)
hexplt.hexbin(x, y, gridsize = 20)
#to use imshow I have to bin the data myself
def histBin(pairsData,xbins,ybins=None):
if (ybins == …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一些Java基本集合(的宝库,fastutil,HPPC)和我已经注意到,类变量有时声明为图案final的局部变量.例如:
public void forEach(IntIntProcedure p) {
final boolean[] used = this.used;
final int[] key = this.key;
final int[] value = this.value;
for (int i = 0; i < used.length; i++) {
if (used[i]) {
p.apply(key[i],value[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了一些基准测试,看起来这样做会稍快一点,但为什么会这样呢?我试图理解如果函数的前三行被注释掉,Java将采取哪些不同的做法.
注意:这似乎与这个问题类似,但这是针对c ++的,并没有说明它们被声明的原因final.
我实际上是在尝试用Java做这个,但我正在自学python的过程中,这让我想知道是否有一个简单/聪明的方法用包装器或其他东西来做这件事.
我想知道在另一个方法中调用特定方法的次数.例如:
def foo(z):
#do something
return result
def bar(x,y):
#complicated algorithm/logic involving foo
return foobar
Run Code Online (Sandbox Code Playgroud)
所以对于每次使用各种参数调用bar,我想知道foo被调用了多少次,也许是这样的输出:
>>> print bar('xyz',3)
foo was called 15 times
[results here]
>>> print bar('stuv',6)
foo was called 23 times
[other results here]
Run Code Online (Sandbox Code Playgroud)
编辑:我意识到我可以在栏内打一个计数器并在我返回时将其转储,但如果有一些魔法可以用包装来完成同样的事情,那将会很酷.这也意味着我可以在其他地方重用相同的包装器,而无需修改方法中的任何代码.
是否有更好的方法将一堆已排序的迭代器合并/整理成一个,以便按排序顺序生成项目?我认为下面的代码可以工作,但我觉得有一种更清晰,更简洁的方法,我错过了.
def sortIters(*iterables, **kwargs):
key = kwargs.get('key', lambda x : x)
nextElems = {}
currentKey = None
for g in iterables:
try:
nextElems[g] = g.next()
k = key(nextElems[g])
if currentKey is None or k < currentKey:
currentKey = k
except StopIteration:
pass #iterator was empty
while nextElems:
minKey = None
stoppedIters = set()
for g, item in nextElems.iteritems():
k = key(item)
if k == currentKey:
yield item
try:
nextElems[g] = g.next()
except StopIteration:
stoppedIters.add(g)
minKey = k if minKey is …Run Code Online (Sandbox Code Playgroud) 我创建了一个应用程序,它是一个可运行的jar(使用maven-assembly插件),带有几个用户可配置的资源,它们位于同一目录中(图像,属性等)
从命令行运行jar时java -jar ...,当前目录正如您所期望的那样.问题是在某些操作系统(Ubuntu 11.04)上,如果只需双击jar启动应用程序,那么当前工作目录就是主目录.
是否有一种获取jar所在的当前目录的首选方法,或者是另一种方法来访问jar旁边的外部资源?
我正在寻找一个类,我可以覆盖一个方法来完成工作,并像迭代器一样返回结果.像这样的东西:
ParallelWorkIterator<Result> itr = new ParallelWorkIterator<Result>(trials,threads) {
public Result work() {
//do work here for a single trial...
return answer;
}
};
while (itr.hasNext()) {
Result result = itr.next();
//process result...
}
Run Code Online (Sandbox Code Playgroud)
这主要用于monte carlo模拟之类的东西,但我不想每次都要处理设置线程池和管理返回线程.我推出了自己的课程,希望能够完成这一课,但我对此并不充分,并且认为我会检查这样的事情是否已经存在.
编辑:要清楚,我希望它在后台运行并在每个工作方法返回后排队结果,直到所有试验都完成.因此,下一个方法可能会等待返回,直到队列中出现结果.
我正在设置一个hadoop集群,其中节点都是相当异构的,即它们每个都有不同数量的核心.目前我必须手动编辑mapred-site.xml每个节点以填写{cores}:
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>{cores}</value>
</property>
Run Code Online (Sandbox Code Playgroud)
添加新节点时,有更简单的方法吗?大多数其他值都是默认值,并且最大映射任务是从节点到节点的唯一变化.
我正在将一些c ++代码移植到java中,并且我一直在运行实例,其中编写它的人不断执行以下操作:
double c = (1.0/(a+1.0)*pow(b, a+1.0));
double d = (1./(integral(gamma, dmax)-integral(gamma, dmin)))*(integral(gamma+1, dmax)-integral(gamma+1, dmin));
Run Code Online (Sandbox Code Playgroud)
代替:
double c = pow(b, a+1.0)/(a+1.0);
double d = (integral(gamma+1, dmax)-integral(gamma+1, dmin))/(integral(gamma, dmax)-integral(gamma, dmin));
Run Code Online (Sandbox Code Playgroud)
第二个似乎更清楚,除非我对C++中的操作顺序错了,否则他们应该做同样的事情.有没有理由做第一个而不是第二个?我唯一能想到的就是精确的一些奇怪的情况.
java ×4
python ×4
iterator ×2
c++ ×1
clear ×1
color-picker ×1
color-scheme ×1
colors ×1
concurrency ×1
double ×1
hadoop ×1
histogram ×1
jar ×1
list ×1
math ×1
matplotlib ×1
optimization ×1
profiling ×1
sorting ×1