首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持尺寸的Numpy切片

保持尺寸的Numpy切片
EN

Stack Overflow用户
提问于 2017-03-25 20:15:00
回答 1查看 918关注 0票数 0

为什么python不保留条件片上的维度?

如果执行以下操作,则结果是只具有一维的数组。

代码语言:javascript
复制
arr1 = np.random.rand(11,300) # .shape = (11,300)                 
arr2 = np.random.rand(11,300) # .shape = (11,300) 
cond = arr2 > 0.5 # .shape = (11,300)  

arr3 = arr1[cond] # .shape = (1649,)

该切片背后的逻辑是什么,它返回一个一维数组?返回(11,300)数组的最佳实践是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-25 20:46:05

https://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays

与整数索引数组不同的是,在布尔情况下,结果是一个一维数组,其中包含索引数组中对应于布尔数组中所有真实元素的所有元素。

它扩展了arr1比掩码具有更多维度的情况。但最基本的一点是,从逻辑上讲,它无法返回任何其他东西。

看看cond (也许是一个更小的案例)。否则,如何将True值映射到(11,300)数组上?

你看过masked arrays吗?这将保持原始形状,将“蒙面”值替换为“--”(在显示中)。

代码语言:javascript
复制
In [284]: arr1 =np.random.randint(0,10,(4,5))
In [285]: arr1
Out[285]: 
array([[4, 6, 5, 8, 8],
       [4, 0, 4, 8, 1],
       [3, 9, 0, 3, 2],
       [8, 8, 7, 5, 7]])
In [286]: mask = arr1<4
In [287]: mask
Out[287]: 
array([[False, False, False, False, False],
       [False,  True, False, False,  True],
       [ True, False,  True,  True,  True],
       [False, False, False, False, False]], dtype=bool)
In [288]: arr1[mask]
Out[288]: array([0, 1, 3, 0, 3, 2])
In [289]: arrM=np.ma.MaskedArray(arr1,~mask)
In [290]: arrM
Out[290]: 
masked_array(data =
 [[-- -- -- -- --]
 [-- 0 -- -- 1]
 [3 -- 0 3 2]
 [-- -- -- -- --]],
             mask =
 [[ True  True  True  True  True]
 [ True False  True  True False]
 [False  True False False False]
 [ True  True  True  True  True]],
       fill_value = 999999)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43021448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档