numpy Python-如何调整数组大小和复制元素

qv7cva1a  于 2022-11-10  发布在  Python
关注(0)|答案(2)|浏览(140)

我有一个数组,其中的数据如下

a = [[1,2,3],[4,5,6],[7,8,9]]

我想把它改成

b = [[1,1,2,2,3,3],[1,1,2,2,3,3],[4,4,5,5,6,6],[4,4,5,5,6,6],[7,7,8,8,9,9],[7,7,8,8,9,9]]

我尝试使用numpy.resize()函数,但在调整大小后,它给出了[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]。我可以使用for循环将数字放在我需要的索引处,但我只是想知道是否有更简单的方法来做到这一点?
为了使任务可视化,下面是原始数组

这就是我想要的

j91ykkif

j91ykkif1#

我最初认为np.tile可以工作,但实际上您正在寻找的是两个不同轴上的两个np.repeat
试试这个可运行的例子吧!


# !/usr/bin/env python

import numpy as np
a = [[1,2,3],[4,5,6],[7,8,9]]
b = np.repeat(np.repeat(a, 2, axis=1), 2, axis=0)
b
<script src="https://modularizer.github.io/pyprez/pyprez.min.js"></script>
0yycz8jy

0yycz8jy2#

您可以将问题视为将每个1x1块的大小调整为2x2块。这可以简单地使用numpy.kron(a, b)来完成,numpy.kron(a, b)a的每个元素--每个1x1块--进行操作,并根据b对其进行“扩展”--因此它应该是一个2x2块。

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> np.kron(a, [[1, 1], [1, 1]])
array([[1, 1, 2, 2, 3, 3],
       [1, 1, 2, 2, 3, 3],
       [4, 4, 5, 5, 6, 6],
       [4, 4, 5, 5, 6, 6],
       [7, 7, 8, 8, 9, 9],
       [7, 7, 8, 8, 9, 9]])

为较大的结构创建第二个操作数的有效方法是使用np.ones和相关函数。

>>> np.kron(a, np.ones((2,4), dtype=int))
array([[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
       [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
       [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
       [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
       [7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9],
       [7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9]])

相关问题