假设有一个数组
arr = np.array([[1,2,3], [4,5,6]])
我的目标是重复N = 2
次axis = 0
上的元素,因此所需的输出为
array([[[1., 4.],
[1., 4.]],
[[2., 5.],
[2., 5.]],
[[3., 6.],
[3., 6.]]])
我试过np.ones((2,2))*arr.T[:,:,None]
,但输出不同
array([[[1., 1.],
[4., 4.]],
[[2., 2.],
[5., 5.]],
[[3., 3.],
[6., 6.]]])
有没有简单的方法来解决这个问题?我猜这是换位的问题,但我不知道如何实现这一点。
- 它是:
np.transpose(np.ones((2,2))*arr.T[:,:,None], axes = tuple([0, 2, 1]))
2条答案
按热度按时间rjzwgtxy1#
虽然@chrslg的
stride_tricks
解决方案可能很快,但它不容易阅读。相反,我建议使用numpynp.repeat
函数,它可以清楚地说明您正在做什么。也就是说,您不能直接使用它来获得想要的结果,您首先需要添加另一个维度来拆分行。由于这种分割,它应该应用于axis=1
而不是0。最后的结果需要进行转置以匹配您要查找的内容。输出:
5uzkadbs2#
一种方法
请注意,它基本上是免费的:它什么也不做,并返回相同的
arr
。只是,步长的改变使得迭代沿着arr
轴1进行,用于新阵列轴0;只对轴1重复;并且对于新的阵列轴2沿着arr
轴0。适用于所有尺寸的2D
arr
和所有重复返回