当前位置: 首页 > 知识库问答 >
问题:

在两个轴上重复阵列的值

上官凯歌
2023-03-14

假设我有这个数组:

array = np.array([[1,2,3],[4,5,6],[7,8,9]])
returns:
123
456
789

我该如何让它做这样的事情呢

returns:
111222333
111222333
111222333
444555666
444555666
444555666
777888999
777888999
777888999

我不知道什么谷歌得到一个答案,因为我所有的结果都是不同的问题,因为我想这不是太常见的事情无论如何,任何和所有的帮助都将不胜感激:)

共有2个答案

顾高翰
2023-03-14

为了好玩(因为嵌套的reshape将更有效),您可以在输入数组和具有额外维度的one数组上使用einsum来创建理想维度的多维数组为了重塑到预期的2D形状:

np.einsum('ij,ikjl->ikjl', array, np.ones((3,3,3,3))).reshape(9,9)

一般方法是:

i,j = array.shape
k = 3 # extra rows
l = 3 # extra cols
np.einsum('ij,ikjl->ikjl', a, np.ones((i,k,j,l))).reshape(i*k,j*l)

输出:

array([[1, 1, 1, 2, 2, 2, 3, 3, 3],
       [1, 1, 1, 2, 2, 2, 3, 3, 3],
       [1, 1, 1, 2, 2, 2, 3, 3, 3],
       [4, 4, 4, 5, 5, 5, 6, 6, 6],
       [4, 4, 4, 5, 5, 5, 6, 6, 6],
       [4, 4, 4, 5, 5, 5, 6, 6, 6],
       [7, 7, 7, 8, 8, 8, 9, 9, 9],
       [7, 7, 7, 8, 8, 8, 9, 9, 9],
       [7, 7, 7, 8, 8, 8, 9, 9, 9]])

不管这种方法有多好,改变顺序以获得其他模式或使用更高维度都是非常容易的。

其他模式的示例:

>>> np.einsum('ij,iklj->iklj', a, np.ones((3,3,3,3))).reshape(9,9)
array([[1, 2, 3, 1, 2, 3, 1, 2, 3],
       [1, 2, 3, 1, 2, 3, 1, 2, 3],
       [1, 2, 3, 1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6, 4, 5, 6],
       [4, 5, 6, 4, 5, 6, 4, 5, 6],
       [4, 5, 6, 4, 5, 6, 4, 5, 6],
       [7, 8, 9, 7, 8, 9, 7, 8, 9],
       [7, 8, 9, 7, 8, 9, 7, 8, 9],
       [7, 8, 9, 7, 8, 9, 7, 8, 9]])

>>> np.einsum('ij,kjil->kjil', a, np.ones((3,3,3,3))).reshape(9,9)
array([[1, 1, 1, 4, 4, 4, 7, 7, 7],
       [2, 2, 2, 5, 5, 5, 8, 8, 8],
       [3, 3, 3, 6, 6, 6, 9, 9, 9],
       [1, 1, 1, 4, 4, 4, 7, 7, 7],
       [2, 2, 2, 5, 5, 5, 8, 8, 8],
       [3, 3, 3, 6, 6, 6, 9, 9, 9],
       [1, 1, 1, 4, 4, 4, 7, 7, 7],
       [2, 2, 2, 5, 5, 5, 8, 8, 8],
       [3, 3, 3, 6, 6, 6, 9, 9, 9]])
金珂
2023-03-14

你必须在这里使用np.repeat两次。

np.repeat(np.repeat(array, 3, axis=1), 3, axis=0)

# [[1 1 1 2 2 2 3 3 3]
#  [1 1 1 2 2 2 3 3 3]
#  [1 1 1 2 2 2 3 3 3]
#  [4 4 4 5 5 5 6 6 6]
#  [4 4 4 5 5 5 6 6 6]
#  [4 4 4 5 5 5 6 6 6]
#  [7 7 7 8 8 8 9 9 9]
#  [7 7 7 8 8 8 9 9 9]
#  [7 7 7 8 8 8 9 9 9]]
 类似资料:
  • 如果一列存在于两个数据帧之间,我想删除它。我检查它是否存在,然后尝试删除它,但它说找不到。 错误:

  • 问题内容: 我想分别沿轴0和轴1重复数组元素M和N次: 这行得通,但是我想知道有没有更好的方法而无需创建临时数组。 问题答案: 您可以使用kronecker产品,请参阅: 不过,您原来的方法也可以!

  • 我试图在一个5年的时间序列图上绘制日期(N=50),我很难弄清楚如何在for循环上运行迭代。下面是我试图绘制日期的一个例子。 我正在绘制日期的视觉效果 目前,我正在尝试: 我收到一个错误: 我不确定这是否与dtype是datetime有关,或者我是否需要尝试另一种方法,但是任何建议/指导都非常感谢! 谢谢你! 这就是我试图完成的:示例图像 编辑:生成打印的代码 ` 这将复制我使用的精确数据的样本。

  • > 值1:8值2:16值3:3值4:13值5:24 它应该检查值是否在上限和下限之间。例如 0-9=2//(3,8)10-20=2//(13,16)20-30=1//(24)30-40=0等等。。。 但在代码中它只是显示。。。0-9=110-20=2 20-30=3 30-40=4,依此类推。

  • 第一次来这里,所以我希望这是有意义的! 我有两个对象数组,比如l1和l2,我想在这两个列表之间进行比较,并在l3中得到一个不匹配的值。用户类包含2个字符串: 比如,l1包含:Java、JSF、JAXR、foo l2包含:JSF、JAXR 我可以对匹配的值进行比较,但不能对不匹配的值进行比较。这种逻辑似乎有缺陷。有什么帮助吗? 对于匹配值: 但是,对于不匹配,当我说不等于时,我得到的不是唯一的值,而

  • 我试图确定数组中的位置。我真的不确定如何处理这种情况