结果是否numpy.lib.stride_tricks.as_strided
取决于NumPy数组的dtype?
这个问题来自的定义.strides
,即
在遍历数组时在每个维度中步进的字节元组。
采取以下我在其他问题中使用过的功能。它需要一个1d或2d数组并创建length的重叠窗口window
。结果将比输入大一维。
def rwindows(a, window):
if a.ndim == 1:
a = a.reshape(-1, 1)
shape = a.shape[0] - window + 1, window, a.shape[-1]
strides = (a.strides[0],) + a.strides
windows = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return np.squeeze(windows)
# examples
# rwindows(np.arange(5), window=2)
# rwindows(np.arange(20).reshape((5,4)), window=2)
由于步幅的定义,例如由于
dtype的等效数组,float32
并且float64
具有不同的步幅,这是否会炸毁我rwindows
上面的函数?
我已经尝试进行测试,但是它只是一种非详尽的方式,正在寻找一个答案,即(1)解释功能doc的免责声明/警告是否与我在此处的要求有关,以及(2)解释了为什么或为什么不同的dtype和stride等价的数组会在上面产生不同的结果。
不,警告as_strided
是针对两个与数据大小无关的问题,而这两个问题更多地来自写入结果视图。
view = as_strided(a . . . )
只有 点记忆a
。这就是为什么在致电之前要进行大量的准备工作的原因as_strided
。如果您的算法已关闭,则可以轻松地将指针view
指向不位于中的内存a
,并且确实可以将其指向垃圾,其他变量或您的操作系统。如果随后写入该视图,则数据可能会丢失,放错位置或损坏。。。或使您的计算机崩溃。对于您的特定示例,它的安全性在很大程度上取决于您所使用的输入。你已经设置strides
有a.strides
使是动态的。您可能需要assert
的dtype
的a
是不奇怪的事情一样object
。
如果确定 始终 具有a
大于的2-d
,则window
可能对算法没问题,但也可以assert
这样做。如果不是,您可能要确保as_strided
输出适用于nda
数组。例如:
shape = a.shape[0] - window + 1, window, a.shape[-1]
应该是
shape = (a.shape[0] - window + 1, window) + a.shape[1:]
为了接受nd输入。就引用坏内存而言,这 可能 永远不会成为问题,但是如果您有更大的维度,则当前shape
将引用错误的数据a
。
view = foo
或bar( . . ., out = view)
),则结果可能是不可预测的,并且可能不是您所期望的。就是说,如果您担心问题并且不需要写入as_strided
视图(因为对于大多数常用的卷积应用程序而言,您不需要这样做),则可以始终将其设置为writable = False
,即使出现这种情况也可以避免这两个问题您strides
和/或shape
不正确。
编辑:
正如@hpaulj所指出的那样,除了这两个问题外,如果您对view
进行复制的操作(像是.flatten()
花哨的索引很大一部分),则可能导致MemoryError
。
问题内容: 我正在从另一个来源接收ZipInputStream,并且需要将第一项的InputStream提供给另一个来源。 我希望能够在不将临时文件保存在设备上的情况下执行此操作,但是,我知道获取单个条目的InputStream的唯一方法是通过ZipFile.getInputStream(entry),并且因为我有一个ZipInputStream而不是ZipFile , 这是不可能的。 所以我最好
我不认为任何一种语言在导入其他源文件这样简单的事情上会像python那样让人头疼。所以问题是:我的模块导入是否需要依赖于代码的运行方式? 我有以下目录结构: 我希望从包中的另一个模块导入包中的一个模块。简单? 因此,我在中添加了以下内容: 现在,如果我从目录中运行,就可以正常工作了。另外,如果我返回一个目录并调用就可以了。看起来像是python搜索相对于给定文件的导入模块。 我看了很多资料,包括这
问题内容: 如果我运行查询,例如: 即使查询与任何记录都不匹配,它也会始终返回结果吗?还是我需要验证并确保结果返回一行? 问题答案: 是的,因为它是一个聚合并且返回零。除非您添加GROUP BY,否则由于没有组,因此没有结果… 除非您添加GROUP BY,然后没有任何行,否则MAX / SUM等将返回NULL。只有COUNT传回没有结果的数字 编辑,有点晚:SUM会像MAX一样返回NULL 编辑,
我用Spring MVC和Spring数据开发了一个产品搜索。用户可以通过名称/描述搜索产品(手动输入。在产品#名称和产品#描述中使用“like”搜索)或通过类别(可点击链接)搜索产品。当显示结果时,用户应该能够使用一些过滤器谓词如价格、大小、颜色等进一步缩小结果。因此,我实现了一些Querydsl谓词。 假设用户发现了红色、绿色和黄色产品,那么我希望在过滤器中只显示这些颜色。我不想使用静态值并提
问题内容: 普通CPU(例如Android设备)是基于寄存器的计算机。Java虚拟机是基于堆栈的计算机。但是基于堆栈的计算机是否依赖于基于寄存器的计算机工作?由于基于堆栈的计算机不是OS,因此不能单独运行吗?除了JVM,是否有任何基于堆栈的计算机示例?有人说1个操作数,2个操作数;你为什么需要这个? 问题答案: JVM在任何地方都没有提到寄存器的存在。从它的角度来看,内存仅存在于少数几个地方,例如
我目前有下拉选择和使用JavaScript显示/隐藏值的工作代码,这取决于所选择的内容,正如你可以看到下面的代码。我想做的是,根据新建和使用的选择,有三种不同的表单输入。如果选择使用,它会直接进入带有输入的表单。如果你选择新的,它会带来另一个下拉列表,你可以选择租赁或购买,并根据这一点选择另外两个表单显示。我知道如何提交一个表单只是一个表单到PHP使用POST。但是,我的问题是,因为根据下拉,表单