【问题标题】:Iterating a numpy array in chunks以块的形式迭代一个 numpy 数组
【发布时间】:2021-01-21 23:37:56
【问题描述】:

如何使用numpy.where()numpy.select()list_ 排列成数字组。我想将数据分成 3 组,然后计算这些函数的标准偏差std()。所以程序将采用457.334015,424.440002,394.795990 来计算标准dev 的第一个值,并将采用424.440002,394.795990, 408.903992 并计算标准偏差等。它将继续这样下去,直到它到达@ 的末尾987654327@。我希望在计算第二个块 424.440002,394.795990, 408.903992 之前删除第一个块 457.334015,424.440002,394.795990。我想从内存中删除块,所以我没有内存错误。使用 numpy 并且不使用 for 循环是否可以实现这一点。

number = 3
list_= np.array([457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,
404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,
320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,
400.869995,394.773010,382.556000])

【问题讨论】:

  • 你保证数组中值的个数是number=3的倍数吗?

标签: python function numpy memory numpy-ndarray


【解决方案1】:

来自this post

from numpy.lib.stride_tricks import as_strided
def strided_app(a, L, S ):  # Window len = L, Stride len/stepsize = S
    nrows = ((a.size-L)//S)+1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n))
list_= np.array([457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,
404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,
320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,
400.869995,394.773010,382.556000])
np.std(strided_app(list_, 3, 1), axis=1)

但是,此代码不会从数组中删除任何元素。另外,请记住,这里使用的函数带有来自 numpy 文档的warning

【讨论】:

  • 虽然这是正确的,但您在此处介绍的滚动窗口方法在哪里按照 OP 的要求从内存中删除项目?
  • 我想把列表分成块,然后逐个计算标准差
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2021-06-02
  • 2021-09-08
  • 2018-03-13
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多