python-使用numpy.lib.stride_tricks.as_strided滑动NaN填充元素的窗口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-使用numpy.lib.stride_tricks.as_strided滑动NaN填充元素的窗口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2147字,纯文字阅读大概需要4分钟。
内容图文
考虑数组
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]
我正在使用从numpy.lib.stride_tricks导入的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输出并最终翻转列,尽管会慢一些.因此,使用前进方法,我们通常会沿着每一行有一个正向的步幅,而向后迈向则是一个负向步幅.
因此,大步向前的两种方法是-
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))
样品运行-
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填充元素的窗口全部内容,希望文章能够帮你解决python-使用numpy.lib.stride_tricks.as_strided滑动NaN填充元素的窗口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。