使用数组生成三项树 - Python

时间:2014-04-14 08:35:19

标签: python

我有一个非常简单的问题,我无法弄明白。我有以下代码:

r = [np.array([100])]
for i in range(2):
  r.append(np.concatenate((r[-1][:1]*1.5, r[-1]*0.5)))

每次迭代都会产生:

[array([100]), array([ 150.,   50.])]

[array([100]), array([ 150.,   50.]), array([ 225.,   75.,   25.])]

这段代码的想法是生成一个类似于二叉树的结构,其中up​​ = 1.5,down = 0.5。所以从100我们上升到150,下降到50.在下一个时间步,从150,我们到225或75;从50到75或25。

但是现在....我想用它来生成三叉树。所以说up = 1.5,middle =保持不变= 1,down = 0.5。

所以迭代应该产生

[array([100]), array([ 150., 100.,  50.])]

[array([100]), array([ 150.,  100., 50.]), array([ 225., 150., 75., 150., 100., 75., 75., 50., 25. ])]

这产生了一种非重组结构。但我不知道如何修改代码来获得它。我得到的最接近的是:

r.append(np.concatenate((r[-1][:1]*1.5,r[-1][:1]*1, r[-1]*0.5)))

但这不会产生结果:

[array([100]), array([ 150.,  100.,   50.]), array([ 225.,  150.,   75.,   50.,   25.])]

谢谢!

1 个答案:

答案 0 :(得分:0)

由于第一个重新组合,向上和向下的向上产生相同的结果,因此在代码中忽略了其中一个。

你想要的是一个非重组结构,所以你需要考虑所有的结果,改变它会产生预期的结果:

for i in range(2):
  r.append(np.concatenate((r[-1]*1.5, r[-1], r[-1]*0.5)))

>>> r
[array([100]), array([ 150.,  100.,   50.]), array([ 225.,  150.,   75.,  150.,  100.,   50.,   75.,   50.,   25.])]

它的作用是取前面的数组(r [-1])并乘以你想要的3乘数,然后连接()将这三个结合起来。