- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
考虑数组a
import numpy as np
import pandas as pd
np.random.seed([3,1415])
a = np.random.randint(100, size=10)
print(a)
[11 98 74 90 15 55 13 11 13 26]
我正在使用 as_strided
from numpy.lib.stride_tricks import as_strided
当我用它来给出如下滚动窗口时
as_strided(a, shape=(len(a), 5), strides=(8, -8))
[[11 0 0 0 0]
[98 11 0 0 0]
[74 98 11 0 0]
[90 74 98 11 0]
[15 90 74 98 11]
[55 15 90 74 98]
[13 55 15 90 74]
[11 13 55 15 90]
[13 11 13 55 15]
[26 13 11 13 55]]
这几乎是完美的。我想在顶部三角形中使用 np.nan
而不是零。
我要这个
[[ 11. nan nan nan nan]
[ 98. 11. nan nan nan]
[ 74. 98. 11. nan nan]
[ 90. 74. 98. 11. nan]
[ 15. 90. 74. 98. 11.]
[ 55. 15. 90. 74. 98.]
[ 13. 55. 15. 90. 74.]
[ 11. 13. 55. 15. 90.]
[ 13. 11. 13. 55. 15.]
[ 26. 13. 11. 13. 55.]]
有没有方便的方法告诉 as_strided
用 np.nan
代替
最佳答案
诀窍是在前面加上 NaN,然后跨越它。可能有两种跨步方式——通过使用适当的步幅向前和向后。设置所需输出的方式,我们需要沿着每一行向后跨步。另一种方法是向前迈进,获得 2D 输出并最终翻转列,尽管它会慢一点。因此,使用前向方法,我们将像往常一样沿每一行有正步幅,而向后步幅为负步幅。
因此,strides
的两种方法是 -
from numpy.lib.stride_tricks import as_strided as strided
def strided_nan_filled(a, W):
a_ext = np.concatenate(( np.full(W-1,np.nan) ,a))
n = a_ext.strides[0]
return strided(a_ext, shape=(a.size,W), strides=(n,n))[:,::-1]
def strided_nan_filled_v2(a, W):
a_ext = np.concatenate(( np.full(W-1,np.nan) ,a))
n = a_ext.strides[0]
return strided(a_ext[W-1:], shape=(a.size,W), strides=(n,-n))
sample 运行-
In [42]: a
Out[42]: array([11, 98, 74, 90, 15, 55, 13, 11, 13, 26])
In [43]: strided_nan_filled(a, 5)
Out[43]:
array([[ 11., nan, nan, nan, nan],
[ 98., 11., nan, nan, nan],
[ 74., 98., 11., nan, nan],
[ 90., 74., 98., 11., nan],
[ 15., 90., 74., 98., 11.],
[ 55., 15., 90., 74., 98.],
[ 13., 55., 15., 90., 74.],
[ 11., 13., 55., 15., 90.],
[ 13., 11., 13., 55., 15.],
[ 26., 13., 11., 13., 55.]])
运行时测试-
In [74]: a = np.random.randint(0,9,(1000))
In [75]: %timeit strided_nan_filled(a, 5)
10000 loops, best of 3: 30.1 µs per loop
In [76]: %timeit strided_nan_filled_v2(a, 5)
10000 loops, best of 3: 28.7 µs per loop
关于python - 使用 numpy.lib.stride_tricks.as_strided 填充 NaN 元素的滑动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520327/
我发现可以从 (X, Y) 步幅为 1,图像要求我们将步幅参数指定为 img.strides * 2 或 img.strides + img.strides。 我不知道他们如何在知道编号的情况下快速计
我有一个 4 张量 x。 6 张量 y 计算如下: x = np.random.randn(64, 28, 28, 1) strided_shape = 64, 26, 26, 3, 3, 1 y =
请问numpy.lib.stride_tricks.as_strided的结果取决于 NumPy 数组的数据类型? 这个问题源于.strides的定义,也就是 Tuple of bytes to st
我有一个方形数组x,形状为(N, N),我想检索形状为(n, n)的方形子数组),它们以 x 的主对角线为中心。例如,使用 N = 3 & n = 2,并操作 x = np.arange(9).res
在处理滚动窗口时,我用列表推导式的方式编写函数 [np.std(x[i:i+framesize]) for i in range(0, len(x)-framesize, hopsize)])] 最近
我想知道是否有可能在不使用 for 循环的情况下使用 as_strided 和一些就地编辑内存的操作来编写迭代算法。 例如,如果我想编写一个算法,将数组中的数字替换为其邻居的总和。我想到了这个令人厌恶
我正在寻找一种将 numpy 数组分割成重叠 block 的有效方法。我知道 numpy.lib.stride_tricks.as_strided 可能是要走的路,但我似乎无法理解它在适用于任意形状数
今天早上花了一段时间寻找一个概括性的问题,以指出有关 as_strided 和/或 how to make generalized window functions 的问题的重复项。关于如何(安全地)
我正在尝试使用 numpy.strided_tricks reshape 一个 numpy 数组。这是我正在关注的指南:https://stackoverflow.com/a/2487551/4909
考虑数组a import numpy as np import pandas as pd np.random.seed([3,1415]) a = np.random.randint(100, siz
我将 numpy 从旧版本更新到了 1.12.0 版本,不幸的是我没有检查哪个版本。我有一个在更新之前运行得非常好的脚本。它使用以下代码行: from numpy.lib.stride_tricks
我是一名优秀的程序员,十分优秀!