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

跳过numpy数组的第n个索引

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

跳过numpy数组的第n个索引

方法#1

modulus

a[np.mod(np.arange(a.size),4)!=0]

样品运行-

In [255]: aOut[255]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [256]: a[np.mod(np.arange(a.size),4)!=0]Out[256]: array([1, 2, 3, 5, 6, 7, 9])

方法2

masking
view

考虑到视图的需求,如果要节省内存,我们可以存储等效的布尔数组,该数组将

8
在Linux系统上占用更少的内存。因此,这种基于掩码的方法将像这样-

# Create maskmask = np.ones(a.size, dtype=bool)mask[::4] = 0

这是内存需求统计信息-

In [311]: mask.itemsizeOut[311]: 1In [312]: a.itemsizeOut[312]: 8

然后,我们可以使用布尔索引作为视图-

In [313]: aOut[313]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [314]: a[mask] = 10In [315]: aOut[315]: array([ 0, 10, 10, 10,  4, 10, 10, 10,  8, 10])

方法#3的

NumPy array strides
要求:
view

np.lib.stride_tricks.as_strided
给定输入数组的长度是的倍数,您可以用来创建这样的视图
n
。如果不是倍数,它仍然可以工作,但不是安全的做法,因为我们将超出为输入数组分配的内存。请注意,这样创建的视图将是
2D

因此,获得这种观点的实现将是-

def skipped_view(a, n):    s = a.strides[0]    strided = np.lib.stride_tricks.as_strided    return strided(a,shape=((a.size+n-1)//n,n),strides=(n*s,s))[:,1:]

样品运行-

In [50]: a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # Input arrayIn [51]: a_out = skipped_view(a, 4)In [52]: a_outOut[52]: array([[ 1,  2,  3],       [ 5,  6,  7],       [ 9, 10, 11]])In [53]: a_out[:] = 100 # Let's prove output is a view indeedIn [54]: aOut[54]: array([  0, 100, 100, 100,   4, 100, 100, 100,   8, 100, 100, 100])


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

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

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