用数组生成三项树 - 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.])]
这个代码的目的是生成一个类似于二项树的结构,向上变动1.5,向下变动0.5。所以从100开始,我们可以上升到150,下降到50。在下一个时间点,从150可以变成225或者75;而从50可以变成75或者25。
但是现在……我想用这个来生成一个三项树。也就是说,向上变动1.5,中间保持不变(也就是1),向下变动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
因为第一个是重组的,所以“上面的下”和“下面的上”产生的结果是一样的,因此代码中忽略了其中一个。
你想要的是一个不重组的结构,所以需要考虑所有的结果,改变这个会产生你想要的结果:
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倍数去乘,再用concat()把这三个结果合在一起。