Python,Numpy,在多个维度上添加数组的方法(广播)
作者:互联网
我有许多不同大小的数组和一个共同的索引.
例如,
Arr1 = np.arange(0, 1000, 1).reshape(100, 10)
Arr2 = np.arange(0, 500, 1).reshape(100,5)
Arr1.shape = (100, 10)
Arr2.shape = (100, 5)
我想将它们一起添加到一个新的数组中,Arr3是三维的.例如
Arr3 = Arr1 + Arr2
Arr3.shape = (100, 10, 5)
注意,在这种情况下,值应该对齐,例如
Arr3[10, 3, 2] = Arr1[10, 3] + Arr2[10, 2]
我一直在尝试使用以下方法
test = Arr1.copy()
test = test[:, np.newaxis] + Arr2
现在,在将两个方形矩阵一起添加时,我已经能够完成这项工作.
m = np.arange(0, 100, 1)
[x, y] = np.meshgrid(x, y)
x.shape = (100, 100)
test44 = x.copy()
test44 = test44[:, np.newaxis] + x
test44.shape = (100, 100, 100)
test44[4, 3, 2] = 4
x[4, 2] = 2
x[3, 2] = 2
但是,在我的实际程序中,我不会有这个问题的方形矩阵.
此外,当您开始向上移动维数时,此方法非常耗费内存,如下所示.
test44 = test44[:, :, np.newaxis] + x
test44.shape = (100, 100, 100, 100)
# Note this next command will fail with a memory error on my computer.
test44 = test44[:, :, :, np.newaxis] + x
所以我的问题有两个部分:
>是否可以从具有共同“共享”轴的两个不同形状的2D阵列创建3D阵列.
>这种方法是否可以在更高阶的维度上扩展?
非常感谢任何帮助.
解决方法:
是的,你正在尝试做的是广播,如果输入具有正确的形状,它将由numpy自动完成.试试这个:
Arr1 = Arr1.reshape((100, 10, 1))
Arr2 = Arr2.reshape((100, 1, 5))
Arr3 = Arr1 + Arr2
我发现this是一个非常好的广播介绍,它应该向你展示如何将这种行为扩展到n维度.
标签:python,numpy,numpy-broadcasting 来源: https://codeday.me/bug/20190625/1285741.html