首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中的隐式扩展?

python中的隐式扩展?
EN

Stack Overflow用户
提问于 2018-08-02 05:03:14
回答 1查看 237关注 0票数 2
m = np.random.randint(4,size=(4,4,4))

假设我想为每个整数创建单独的数组,如下所示

mm=[]
mm.append((m==1).astype(int))
mm.append((m==2).astype(int))
mm.append((m==3).astype(int))

我想知道是否有更好的方法来做到这一点,而不必显式定义m==1等。是否有可能在Python语言中像在Matlab语言中一样轻松地实现多维数组的隐式扩展方法,如下面的post所示

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 05:09:00

使用ndim数组作为输出,利用broadcasting -

mm = m == np.arange(1,4)[:,None,None,None]

请注意,我们使用None,这是np.newaxis的别名来扩展范围数组的维度,因此通过相等比较,我们可以有效地对m中的所有元素和范围数组中的所有元素进行逐个元素的比较。这是必需的,这样broadcasting才会受到影响。

对于比较n维数组m和值数组的一般情况,例如:ar = np.array([1,2,3]),我们将使用重塑来带来相同的维度扩展效果,如下所示:

mm = m == ar.reshape((-1,)+(1,)*m.ndim)

或者,使用内置的np.equal.outer,因为我们实际上是在进行外部相等比较-

mm = np.equal.outer(ar,m)

最后,将int dtype数组转换为intmm.astype(int)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51642231

复制
相关文章

相似问题

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