我有一个非常简单的问题,我无法弄明白。我有以下代码:
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.])]
谢谢!
答案 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乘数,然后连接()将这三个结合起来。