将2D数组函数返回值分配给新的numpy数组

克里山

我是python的新手,有一个愚蠢的问题。我抬头寻找答案,找不到答案,所以我在这里(StackOverflow上的第一个问题,如果有任何错误,请原谅)。

我有一个功能完美的函数(functions.Reservoir)。它需要一个复杂的numpy 2D数组和一个浮点值作为参数。它返回另一个复杂的numpy 2D数组。我尝试将所有这些返回值保存在一个新的numpy数组中。问题是第一个打印命令为我提供了正确的值,这意味着我的功能正常工作。但是在for循环之外,当我打印l变量时,所有元素都具有相同的值,即最后一个元素应该具有的值。

你能告诉我我做错了什么吗?

您可以帮助我的另一件事是一种将这些返回值保存为3D numpy数组的方法。我不想使用vstack,因为有时我的循环会迭代4000次,而vstack会大大降低它的速度。我现在要做的是将numpy数组另存为对象,然后稍后从此可迭代对象中创建一个新数组。如果有更好的方法,请告诉我。提前致谢

    k= np.zeros((400,3), dtype=np.complex128)
    l= np.empty(noPoints1, dtype=object)
    for i in  xrange(noPoints1):
      l[i] = functions.Reservoir(k, data[ OFFSET1+ Discard +i] )
      print l[i]
      k=l[i]
    print l

更新

这里是我的代码的更多信息:

def determ(k1, k2,  d): 
    dkdt = np.zeros_like(k1)

    EA1 = np.absolute(k1[0])**2
    EA2 = np.absolute(k1[1])**2

    gain1= g1*(k1[2]-N0)/(1+s*EA1)
    gain2= g2*(k1[2]-N0)/(1+s*EA2)

    dkdt[0]= 0.5 * (1+ A*1j) * (gain1 - pd) * k1[0] 

    dkdt[1]= 0.5 * (1+ A*1j) * (gain2 - pd) * k1[1] 

    dkdt[2]= Stroom/e - k1[2]*ed - EA1*gain1 - EA2*gain2   
    return dkdt

def Reservoir(y,d): 
    q= y.shape[0]               
    mdata= 0.5*np.pi*d*maskvector    #Maskvector 1D with q elements

    for n in xrange(q):  
      yn = y[n,:]               # Predictor

      if n+1<q:
        ytd= y[n+1,:]           # Predictor Delayed Field strength
      else:
        ytd= y[n+1-q,:]
      #See y as the state of a circular reservoir. If you reach the end at q, then it directly connects back at the start.

      fn = determ(k1=yn, k2=ytd, d=mdata[n]) 

      ybar = yn + fn*step           # Corrector
      if n+2<q:
        ytdbar= y[n+2,:]            # Corrector Delayed Field strength  
      else:
        ytdbar= y[n+2-q,:]

      fnbar = determ(k1= ybar, k2=ytdbar, d=mdata[n])

      if n+1<q:
        y[n+1] = yn + 0.5*(fn + fnbar)*step 
      else:
        y[n+1-q] = yn + 0.5*(fn + fnbar)*step 
    return (y)

PS。我尝试了HYRY的答案(从返回NumPy数组的循环中收集结果),但是对于所有元素我仍然得到相同的值。

BM

看来您总是在同一阵列上工作。进行更改k=l[i].copy()将确保在每个步骤上都可以处理新的阵列。

return yReservoir一点儿也不创建一个新的数组作为explaine文档

请注意,数组切片不会复制内部数组数据,但还会产生原始数据的新视图,

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将新值分配给 numpy 数组的问题

来自分类Dev

如何将值分配给2D向量(如2D数组)

来自分类Dev

将值分配给NumPy数组

来自分类Dev

将numpy点数组分配给2D正方形网格

来自分类Dev

将边界值分配给通过2D数组构造的棋盘

来自分类Dev

如何将字符串中的值分配给2d数组?

来自分类Dev

使用jQuery将2D数组值分配给HTML表

来自分类Dev

使用循环将值分配给2d数组

来自分类Dev

XSLT将函数返回值分配给变量

来自分类Dev

SQUIRREL:将函数的返回值分配给变量

来自分类Dev

JavaScript-将数组索引分配给返回值不起作用

来自分类Dev

将2d数组指针参数分配给本地数组指针变量

来自分类Dev

将复杂的值分配给numpy数组?

来自分类Dev

将复杂的值分配给numpy数组?

来自分类Dev

将稀疏矩阵的值分配给 numpy 数组

来自分类Dev

如何在Java中扫描文件并将值分配给2D数组

来自分类Dev

如何在循环中将值分配给2D数组?

来自分类Dev

用C语言将字符分配给2D数组

来自分类Dev

从2d char array C ++将字符串分配给char数组

来自分类Dev

将值分配给数组指针

来自分类Dev

将值分配给动态数组

来自分类Dev

Java:将值分配给数组

来自分类Dev

如何将dlsym()的返回值分配给函数类型?

来自分类Dev

C-尝试将函数的返回值分配给变量会导致分段错误

来自分类Dev

f#使用Microsoft odbc将函数的返回值分配给对象

来自分类Dev

如何将dlsym()的返回值分配给函数类型?

来自分类Dev

将函数的返回值分配给变量时,不显示输出

来自分类Dev

C-尝试将函数的返回值分配给变量会导致分段错误

来自分类Dev

将公共静态函数的返回值分配给私有变量

Related 相关文章

热门标签

归档