栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

numpy.as_strided的结果是否取决于输入dtype?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

numpy.as_strided的结果是否取决于输入dtype?

不,警告

as_strided
是针对两个与数据大小无关的问题,而这两个问题更多地来自写入结果视图。

  1. 首先,没有任何保护措施,以确保
    view = as_strided(a . . . )
    只有 点记忆
    a
    。这就是为什么在致电之前要进行大量的准备工作的原因
    as_strided
    。如果您的算法已关闭,则可以轻松地将指针
    view
    指向不位于中的内存
    a
    ,并且确实可以将其指向垃圾,其他变量或您的操作系统。如果随后写入该视图,则数据可能会丢失,放错位置或损坏。。。或使您的计算机崩溃。

对于您的特定示例,它的安全性在很大程度上取决于您所使用的输入。你已经设置

strides
a.strides
使是动态的。您可能需要
assert
dtype
a
是不奇怪的事情一样
object

如果确定 始终 具有

a
大于的2-d
,则
window
可能对算法没问题,但也可以
assert
这样做。如果不是,您可能要确保
as_strided
输出适用于nd
a
数组。例如:

shape = a.shape[0] - window + 1, window, a.shape[-1]

应该是

shape = (a.shape[0] - window + 1, window) + a.shape[1:]

为了接受nd输入。就引用坏内存而言,这 可能 永远不会成为问题,但是如果您有更大的维度,则当前

shape
将引用错误的数据
a

  1. 其次,创建的视图多次引用相同的数据块。如果您随后对该视图进行并行写入(通过
    view = foo
    bar( . . ., out = view)
    ),则结果可能是不可预测的,并且可能不是您所期望的。

就是说,如果您担心问题并且不需要写入

as_strided
视图(因为对于大多数常用的卷积应用程序而言,您不需要这样做),则可以始终将其设置为
writable= False
,即使出现这种情况也可以避免这两个问题您
strides
和/或
shape
不正确。

编辑:
正如@hpaulj所指出的那样,除了这两个问题外,如果您对

view
进行复制的操作(像是
.flatten()
花哨的索引很大一部分),则可能导致
MemoryError



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号