Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python列表更新numpy数组时出现意外行为 t=0 abig=零((10000150)) aa=[0代表范围(150)内的i] 打印abig[0] 而1: aa=abig[t] 对于范围(150)内的k: 对于范围(150)内的i: ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k]) aa[k]=购买力平价 如果aa[k]10: aa[k]=10 打印abig[0] abig[t+1]=aa t=t+1 sds=减法(abig[t-1],abig[t]) 如果norm(sds)_Python_Numpy - Fatal编程技术网

使用Python列表更新numpy数组时出现意外行为 t=0 abig=零((10000150)) aa=[0代表范围(150)内的i] 打印abig[0] 而1: aa=abig[t] 对于范围(150)内的k: 对于范围(150)内的i: ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k]) aa[k]=购买力平价 如果aa[k]10: aa[k]=10 打印abig[0] abig[t+1]=aa t=t+1 sds=减法(abig[t-1],abig[t]) 如果norm(sds)

使用Python列表更新numpy数组时出现意外行为 t=0 abig=零((10000150)) aa=[0代表范围(150)内的i] 打印abig[0] 而1: aa=abig[t] 对于范围(150)内的k: 对于范围(150)内的i: ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k]) aa[k]=购买力平价 如果aa[k]10: aa[k]=10 打印abig[0] abig[t+1]=aa t=t+1 sds=减法(abig[t-1],abig[t]) 如果norm(sds),python,numpy,Python,Numpy,代码中有几个问题(除了变量名的选择)。第一,做: t=0 abig= zeros((10000,150)) aa=[0 for i in range(150)] print abig[0] while 1: aa=abig[t] for k in range(150): for i in range(150): ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk

代码中有几个问题(除了变量名的选择)。第一,做:

t=0
abig= zeros((10000,150))    
aa=[0 for i in range(150)]
print abig[0]

while 1:
    aa=abig[t]

    for k in range(150):

        for i in range(150):         
            ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])
        aa[k]=ppp

        if aa[k]<0:
            aa[k]=0
        if aa[k]>10:
            aa[k]=10
    print abig[0]
    abig[t+1]=aa
    t=t+1
    sds=subtract(abig[t-1],abig[t])
    if norm(sds)<0.0001:
        break
print t 
print aa
不复制
abig[t]
。相反,
aa
abig[t]
引用相同的数据,因此如果您执行以下操作:

aa=abig[t]
然后自动

aa[1] = 20
另一方面,作业的顺序可能是错误的。我想你想要的是:

abig[t][1] = 20
由于
abig
似乎是
numpy
数组,因此隐式使用了
copy
方法,因此
abig[t]
aa
的副本(它们不共享数据)

现在正在做:

abig[t] = aa
不会更改aa[1]

其次,这部分代码:

abig[t][1] = 20
与以下内容相同:

for i in range(150):         
    ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])
aa[k]=ppp
因此,循环是无用的。我想你真正的意思是

aa[k]=aa[k]+nk[k]*(1-iris[k][3]*aa[149]*iris[149][3]*kk[149][k])
(但不完全确定)


总之,在您当前的实现中,
aa
abig[t]
abig[t+1]
都引用相同的数据,因此当您减去连续行时,会得到一堆零。

这些是我见过的最糟糕的变量名。这甚至会给用户留下深刻印象+1对于荒谬代码的英雄解释,这只是一件小事,因为他表面上在使用numpy,所以
abig[t+1]=aa
实际上是可以的。第一个
aa=…
不是副本是关键,这取决于它应该做什么,在那里添加
.copy()
应该可以解决这个问题,尽管我想这会留下很多矢量化和清理工作。@seberg谢谢你的评论。我已经相应地更新了我的答案。
for i in range(150):         
    aa[k]=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])