小编per*_*iae的帖子

如何使用预处理程序指令检查OS?

我需要我的代码根据编译它的操作系统做不同的事情.我正在寻找这样的东西:

#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?有没有更好的方法来做同样的事情?

c operating-system conditional-compilation c-preprocessor

175
推荐指数
7
解决办法
13万
查看次数

如何开始程序生成?

程序生成最近引起了人们的关注(由Spore,MMO等),它似乎是一种有趣/强大的编程技术.

我的问题是这些:

  • 您知道任何使用程序生成技术的中型项目吗?
  • 什么语言/类别的语言最适合程序生成?
  • 你能用程序生成"严肃"的代码吗?(即不是游戏)

procedural-generation

141
推荐指数
8
解决办法
14万
查看次数

惯用语:'时间'循环

说我有一个foo我想要打电话的功能n.在Ruby中,我会写:

n.times { foo }
Run Code Online (Sandbox Code Playgroud)

在Python中,我可以写:

for _ in xrange(n): foo()
Run Code Online (Sandbox Code Playgroud)

但这似乎是一种做事的hacky方式.

我的问题:在Python中有这样一种惯用的方法吗?

python loops idioms

47
推荐指数
4
解决办法
3万
查看次数

在C++中存储类型

是否可以将类型名称存储为C++变量?例如,像这样:

type my_type = int; // or string, or Foo, or any other type
void* data = ...;
my_type* a = (my_type*) data;
Run Code Online (Sandbox Code Playgroud)

我知道有99.9%的时间有更好的方法来做你想做的事情而不需要使用无效指针,但我很好奇C++是否允许这样的事情.

c++ types casting

29
推荐指数
4
解决办法
4万
查看次数

按多个轴排序2D numpy数组

我有一个2D numpy形状的阵列(N,2),它持有N个点(x和y坐标).例如:

array([[3, 2],
       [6, 2],
       [3, 6],
       [3, 4],
       [5, 3]])
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,使得我的点按x坐标排序,然后在x坐标相同的情况下按y排序.所以上面的数组应该如下所示:

array([[3, 2],
       [3, 4],
       [3, 6],
       [5, 3],
       [6, 2]])
Run Code Online (Sandbox Code Playgroud)

如果这是一个普通的Python列表,我只需要定义一个比较器来做我想要的,但据我所知,numpy的sort函数不接受用户定义的比较器.有任何想法吗?


编辑:感谢您的想法!我设置了一个包含1000000个随机整数点的快速测试用例,并对我可以运行的那些进行了基准测试(抱歉,目前无法升级numpy).

Mine:   4.078 secs 
mtrw:   7.046 secs
unutbu: 0.453 secs
Run Code Online (Sandbox Code Playgroud)

python sorting numpy

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

独立滚动矩阵的行

我有一个矩阵(准确地说是2d numpy ndarray):

A = np.array([[4, 0, 0],
              [1, 2, 3],
              [0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)

我想A根据另一个数组中的滚动值独立滚动每一行:

r = np.array([2, 0, -1])
Run Code Online (Sandbox Code Playgroud)

也就是说,我想这样做:

print np.array([np.roll(row, x) for row,x in zip(A, r)])

[[0 0 4]
 [1 2 3]
 [0 5 0]]
Run Code Online (Sandbox Code Playgroud)

有没有办法有效地做到这一点?也许使用花哨的索引技巧?

python performance numpy

15
推荐指数
3
解决办法
2575
查看次数

在Numpy中逐行索引

我有两个矩阵,A并且B:

A = array([[2., 13., 25., 1.], [ 18., 5., 1., 25.]])
B = array([[2, 1], [0, 3]])
Run Code Online (Sandbox Code Playgroud)

我想索引每一行的A每一行B,产生切片:

array([[25., 13.], [18., 25.]])
Run Code Online (Sandbox Code Playgroud)

也就是说,我基本上想要这样的东西:

array([A[i,b] for i,b in enumerate(B)])
Run Code Online (Sandbox Code Playgroud)

有没有办法直接指出这个?我能做的最好的就是这个"平板黑客":

A.flat[B + arange(0,A.size,A.shape[1])[:,None]]
Run Code Online (Sandbox Code Playgroud)

python indexing numpy

13
推荐指数
2
解决办法
1150
查看次数

在Matlab中是否有splat运算符(或等效运算符)?

如果我有一个数组(在运行时之前长度未知),有没有办法调用一个函数,并将数组的每个元素作为一个单独的参数?

像这样:

foo = @(varargin) sum(cell2mat(varargin));
bar = [3,4,5];
foo(*bar) == foo(3,4,5)
Run Code Online (Sandbox Code Playgroud)

上下文:我有一个n-d数组的索引列表Q.我想要的是什么Q(a,b,:),但我只有[a,b].由于我不知道n,我不能只是硬编码索引.

matlab operators multidimensional-array splat matrix-indexing

11
推荐指数
1
解决办法
1243
查看次数

为什么每次更新时我的pylab动画都会变慢?

我想通过调用imshowfor循环来显示一个简单的动画.这是我的问题的演示:

import pylab,time
images = [pylab.uniform(0,255,(50,50)) for _ in xrange(40)]
pylab.ion()
timings = []
for img in images:
  tic = time.time()
  pylab.imshow(img)
  pylab.draw()
  toc = time.time()
  timings.append(toc-tic)
pylab.clf()
pylab.plot(timings)
pylab.title('elapsed time per iteration')
pylab.ioff()
pylab.show()
Run Code Online (Sandbox Code Playgroud)

请注意,我在运行循环之前生成图像,并且我唯一的部分是imshowdraw函数.我得到的结果如下: 运行我的演示的结果

我怎样才能避免这种放缓?

python matplotlib

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

为什么这个Haskell语句不能懒惰地评估?

我定义了以下函数:

ex 1 x = 1
ex 0 x = 0
ex b x = b ** x
Run Code Online (Sandbox Code Playgroud)

然后,当我执行以下操作时:

1 `ex` (sum [1..])
Run Code Online (Sandbox Code Playgroud)

它试图计算无限序列的总和,而不是懒惰和返回1.为什么?


编辑:经过进一步调查,我发现如果我ex在文件中定义函数会发生懒惰,但如果我在GHCI中定义它则不会:

$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
Prelude> let ex 1 x = 1
Prelude> let ex b x = b ** x
Prelude> ex 1 (sum [1..])
<interactive>: out of memory (requested 1048576 bytes)
Run Code Online (Sandbox Code Playgroud)

如果我将ex定义拉入文件(在本例中为test.hs):

$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation ghci

8
推荐指数
1
解决办法
451
查看次数