gpt4 book ai didi

python - python中的隐式扩展?

转载 作者:行者123 更新时间:2023-11-28 20:13:59 25 4
gpt4 key购买 nike

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 所示?

最佳答案

要将 ndim 数组作为输出,利用广播 -

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

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

对于将 n 维数组 m 与值数组进行比较的一般情况,例如:ar = np.array([1,2,3]),我们将使用 reshape 来实现相同的维度扩展效果,就像这样 -

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

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

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

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

关于python - python中的隐式扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com