- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 numpy 数组
a = np.arange(12)
>>> [0,1,2,3,4,5,6,7,8,9,10,11]
我正在尝试像这样计算所有可能的累积和
np.cumsum[2:] + np.cumsum[:-2]
np.cumsum[3:] + np.cumsum[:-3]
...
np.cumsum[11:] + np.cumsum[:-11]
如何在没有循环的情况下实现这一点我尝试做
starts = np.arange(2,12)
np.cumsum[starts:] + np.cumsum[:-starts]
but I get this error
TypeError: only integer scalar arrays can be converted to a scalar index
如何在没有 for 循环的情况下做到这一点
我正在尝试做什么
我正在尝试计算序列长度内所有可能时间范围的移动平均值。例如,如果我的数组大小为 10,我可以移动平均 1 个周期(没有意义),移动平均 2 个周期、3 个周期...10 个周期。我该如何实现这个目标。我想计算从 2 到 n 的移动平均值,其中 n 是序列的大小
最佳答案
不确定我是否完全理解了这个问题,您可以将以下内容作为起点。
您需要具有统一大小的数组才能利用矢量化。您无法通过简单的切片来做到这一点,但零填充在这种情况下可以有所帮助:
In [3]: a = np.arange(12)
In [4]: a
Out[4]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [15]: starts = np.arange(2,12)
In [18]: left = np.stack([np.pad(a,(0,s),mode="constant")[s:] for s in starts])
In [19]: left
Out[19]:
array([[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0],
[ 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0],
[ 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0],
[ 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0],
[ 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0],
[ 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0],
[ 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0],
[ 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
这里您还需要将所有内容向左移动以获得正确的对齐方式:
In [27]: right = np.stack([ np.roll(np.pad(a, (s,0), mode="constant")[:-s], -s) for s in starts ])
In [28]: right
Out[28]:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0],
[0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
现在您可以将矢量化的np.cumsum
用于密集部分
In [41]: np.cumsum(left, axis=1) + np.cumsum(right, axis=1)
Out[41]:
array([[ 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 110, 110],
[ 3, 8, 15, 24, 35, 48, 63, 80, 99, 99, 99, 99],
[ 4, 10, 18, 28, 40, 54, 70, 88, 88, 88, 88, 88],
[ 5, 12, 21, 32, 45, 60, 77, 77, 77, 77, 77, 77],
[ 6, 14, 24, 36, 50, 66, 66, 66, 66, 66, 66, 66],
[ 7, 16, 27, 40, 55, 55, 55, 55, 55, 55, 55, 55],
[ 8, 18, 30, 44, 44, 44, 44, 44, 44, 44, 44, 44],
[ 9, 20, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33],
[ 10, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22],
[ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]])
现在您可能需要清理结果才能获得您想要的结果,但我仍然不确定,如果您可以发布预期的输出,那就太好了。像这样的事情应该做:
In [50]: [ row[:-s] for row,s in zip(csum,starts) ]
Out[50]:
[array([ 2, 6, 12, 20, 30, 42, 56, 72, 90, 110]),
array([ 3, 8, 15, 24, 35, 48, 63, 80, 99]),
array([ 4, 10, 18, 28, 40, 54, 70, 88]),
array([ 5, 12, 21, 32, 45, 60, 77]),
array([ 6, 14, 24, 36, 50, 66]),
array([ 7, 16, 27, 40, 55]),
array([ 8, 18, 30, 44]),
array([ 9, 20, 33]),
array([10, 22]),
array([11])]
关于python - 如何根据输入获取一维 numpy 数组的所有可能切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50036888/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!