我正在尝试将2个数组元素明智地连接起来。我进行了级联以产生正确的形状,但尚未在元素上应用它。
所以我有这个数组
[0, 1]
[2, 3]
[4, 5]
我想用每个元素附加数组中的每个元素。目标结果将是
[0, 1, 0, 1]
[0, 1, 2, 3]
[0, 1, 4, 5]
[2, 3, 0, 1]
[2, 3, 2, 3]
[2, 3, 4, 5]
[4, 5, 0, 1]
[4, 5, 2, 3]
[4, 5, 4, 5]
我认为我可能需要换一个轴,但是这样我就无法使广播工作。
任何帮助将不胜感激。在numpy中有很多值得学习的地方!
a = np.arange(6).reshape(3, 2))
b = np.concatenate((a, a), axis=1)
答案 0 :(得分:2)
一种方法是堆叠使用np.repeat
和np.tile
创建的复制版本-
In [52]: n = len(a)
In [53]: np.hstack((np.repeat(a,n,axis=0),np.tile(a,(n,1))))
Out[53]:
array([[0, 1, 0, 1],
[0, 1, 2, 3],
[0, 1, 4, 5],
[2, 3, 0, 1],
[2, 3, 2, 3],
[2, 3, 4, 5],
[4, 5, 0, 1],
[4, 5, 2, 3],
[4, 5, 4, 5]])
由于您提到了broadcasted-assignment
-
broadcasting
答案 1 :(得分:1)
一种解决方案是在senderle的cartesian_product
上构建,以将其扩展到2D数组。这是我通常的操作方式:
# Your input array.
arr
# array([[0, 1],
# [2, 3],
# [4, 5]])
idxs = cartesian_product(*[np.arange(len(arr))] * 2)
arr[idxs].reshape(idxs.shape[0], -1)
# array([[0, 1, 0, 1],
# [0, 1, 2, 3],
# [0, 1, 4, 5],
# [2, 3, 0, 1],
# [2, 3, 2, 3],
# [2, 3, 4, 5],
# [4, 5, 0, 1],
# [4, 5, 2, 3],
# [4, 5, 4, 5]])