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

numpy:使用重塑形状或换新轴添加尺寸

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

numpy:使用重塑形状或换新轴添加尺寸

我看不出有太大差异的证据。您可以对非常大的阵列进行时间测试。基本上,两者都摆弄形状,甚至大步向前。

__array_interface__
是访问此信息的好方法。例如:

In [94]: b.__array_interface__Out[94]: {'data': (162400368, False), 'descr': [('', '<f8')], 'shape': (5,), 'strides': None, 'typestr': '<f8', 'version': 3}In [95]: b[None,:].__array_interface__Out[95]: {'data': (162400368, False), 'descr': [('', '<f8')], 'shape': (1, 5), 'strides': (0, 8), 'typestr': '<f8', 'version': 3}In [96]: b.reshape(1,5).__array_interface__Out[96]: {'data': (162400368, False), 'descr': [('', '<f8')], 'shape': (1, 5), 'strides': None, 'typestr': '<f8', 'version': 3}

两者都使用与

data
原始缓冲区相同的缓冲区来创建视图。形状相同,但重塑不会改变
strides
reshape
让您指定
order

.flags
显示
C_CONTIGUOUS
标志中的差异。

reshape
可能会更快,因为它所做的更改更少。但是,无论哪种方式,该操作都不会对较大的计算时间产生太大影响。

例如大

b

In [123]: timeit np.outer(b.reshape(1,-1),b)1 loops, best of 3: 288 ms per loopIn [124]: timeit np.outer(b[None,:],b)1 loops, best of 3: 287 ms per loop

有趣的发现:

b.reshape(1,4).strides -> (32, 8)

这是我的猜测。

.__array_interface__
正在显示基础属性,并且
.strides
更像是一个属性(尽管它可能全部埋在了C代码中)。默认基础值是
None
,并且在需要计算(或显示为
.strides
)时,会根据形状和商品尺寸进行计算。
32
是到第一行末尾的距离(4x8)。
np.ones((2,4)).strides
具有相同的
(32,8)
(和
None
__array_interface__


b[None,:]
另一方面正在为广播准备阵列。广播时,将重复使用现有值。这就是
0
in的
(0,8)
功能。

In [147]: b1=np.broadcast_arrays(b,np.zeros((2,1)))[0]In [148]: b1.shapeOut[148]: (2, 5000)In [149]: b1.stridesOut[149]: (0, 8)In [150]: b1.__array_interface__Out[150]: {'data': (3023336880L, False), 'descr': [('', '<f8')], 'shape': (2, 5), 'strides': (0, 8), 'typestr': '<f8', 'version': 3}

b1
显示与相同,
np.ones((2,5))
但只有5个项目。

np.broadcast_arrays
是中的功能
/numpy/lib/stride_tricks.py
。它使用
as_strided
来自同一文件。这些函数直接与shape和stride属性一起使用。



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

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

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