Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace each array element by 4 copies in Python?

Tags:

How do I use numpy / python array routines to do this ?

E.g. If I have array [ [1,2,3,4,]] , the output should be

[[1,1,2,2,],
 [1,1,2,2,],
 [3,3,4,4,],
 [3,3,4,4]]

Thus, the output is array of double the row and column dimensions. And each element from original array is repeated three times.

What I have so far is this

def operation(mat,step=2):
    result = np.array(mat,copy=True)
    result[::2,::2] = mat
    return result

This gives me array

[[ 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]]

for the input

[[98 40]
 [29 54]]

The array will always be of even dimensions.

like image 911
CyprUS Avatar asked Oct 18 '16 06:10

CyprUS


People also ask

How do you replace an element in an array Python?

We can replace values inside the list using slicing. First, we find the index of variable that we want to replace and store it in variable 'i'. Then, we replace that item with a new value using list slicing.

How do you change multiple elements in an array in Python?

Changing Multiple Array Elements To do this, you will need to make use of the slice operator and assign the sliced values a new array to replace them. The array you use must contain the same number of elements and be of the same type as the elements that you want to replace.

How do you copy part of an array in Python?

Example 2: Copy an Array Using copy() Function Using the copy() function is another way of copying an array in Python. In this case, a new array object is created from the original array and this type of copy is called deep copy.


1 Answers

Use 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]])

Explanation:

First off you can repeat the arrya items:

  In [30]: np.repeat(A, 3)
  Out[30]: array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

then all you need is reshaping the result (based on your expected result this can be different):

  In [32]: np.repeat(A, 3).reshape(2, 3*2)
  array([[1, 1, 1, 2, 2, 2],
         [3, 3, 3, 4, 4, 4]])

And now you should repeat the result along the the first axis:

  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]])
like image 92
Mazdak Avatar answered Sep 25 '22 17:09

Mazdak