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
复制相似问题