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所示
发布于 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数组转换为int
:mm.astype(int)
。
https://stackoverflow.com/questions/51642231
复制相似问题