如何在Python中用4个副本替换每个数组元素?

Cyp*_*rUS 5 python arrays numpy

我如何使用numpy/python数组例程来执行此操作?

例如,如果我有数组[ [1,2,3,4,]],输出应该是

[[1,1,2,2,],
 [1,1,2,2,],
 [3,3,4,4,],
 [3,3,4,4]]
Run Code Online (Sandbox Code Playgroud)

因此,输出是行和列维度的两倍的数组.原始数组中的每个元素重复三次.

到目前为止,我有这个

def operation(mat,step=2):
    result = np.array(mat,copy=True)
    result[::2,::2] = mat
    return result
Run Code Online (Sandbox Code Playgroud)

这给了我阵列

[[ 98.+0.j   0.+0.j  40.+0.j   0.+0.j]
 [  0.+0.j   0.+0.j   0.+0.j   0.+0.j]
 [ 29.+0.j   0.+0.j  54.+0.j   0.+0.j]
 [  0.+0.j   0.+0.j   0.+0.j   0.+0.j]]
Run Code Online (Sandbox Code Playgroud)

输入

[[98 40]
 [29 54]]
Run Code Online (Sandbox Code Playgroud)

阵列将始终具有均匀的尺寸.

Kas*_*mvd 3

使用np.repeat()

In [9]: A = np.array([[1, 2, 3, 4]])
In [10]: np.repeat(np.repeat(A, 2).reshape(2, 4), 2, 0)
Out[10]: 
array([[1, 1, 2, 2],
       [1, 1, 2, 2],
       [3, 3, 4, 4],
       [3, 3, 4, 4]])
Run Code Online (Sandbox Code Playgroud)

解释:

首先,您可以重复 arrya 项目:

  In [30]: np.repeat(A, 3)
  Out[30]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])
Run Code Online (Sandbox Code Playgroud)

那么您所需要的就是重塑结果(根据您的预期结果,这可能会有所不同):

  In [32]: np.repeat(A, 3).reshape(2, 3*2)
  array([[1, 1, 1, 2, 2, 2],
         [3, 3, 3, 4, 4, 4]])
Run Code Online (Sandbox Code Playgroud)

现在您应该沿着第一个轴重复结果:

  In [34]: np.repeat(np.repeat(A, 3).reshape(2, 3*2), 3, 0)
  Out[34]: 
  array([[1, 1, 1, 2, 2, 2],
         [1, 1, 1, 2, 2, 2],
         [1, 1, 1, 2, 2, 2],
         [3, 3, 3, 4, 4, 4],
         [3, 3, 3, 4, 4, 4],
         [3, 3, 3, 4, 4, 4]])
Run Code Online (Sandbox Code Playgroud)