Christian
Christian

Reputation: 17

Index of the current position inside of a python loop with increments?

I'm trying to write an array of values within two nested loops over another ndarray with at the corresponding position. Enumerate does not work, because of the increments.

My example-Code does the job, but I'm fairly certain, there are more elegant ways:


basearray = np.array([[10, 20, 30, 40, 50],
             [15, 16, 17, 18, 19],
             [25, 26, 27, 28, 29],
             [35, 36, 37, 38, 39]])

stepx=0
stepy=0
incrementx=2
incrementy=2
resultarray=np.zeros(((len(basearray)),len(basearray[1])))

for x in basearray[::incrementx]:
    stepy=0
    for y in x[::incrementy]:
        resultarray[stepx][stepy]=y*2
        stepy=stepy+incrementy
    stepx=stepx+incrementx
print(resultarray)

[[ 20.   0.  60.   0. 100.]
 [  0.   0.   0.   0.   0.]
 [ 50.   0.  54.   0.  58.]
 [  0.   0.   0.   0.   0.]]

How can I solve that?

Very best and thank you in advance

Christian

Upvotes: 0

Views: 128

Answers (2)

Yash Mehta
Yash Mehta

Reputation: 2006

If you are intialising zeroes in the form of list the desired output can be achievable

Code:-

import numpy as np
basearray=np.array([[10, 20, 30, 40, 50],
                     [15, 16, 17, 18, 19],
                     [25, 26, 27, 28, 29],
                     [35, 36, 37, 38, 39]])
resulting_array1=([[0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0]])
for lis in range(0,len(basearray)-1,2):
    for y in range(0,len(basearray[0]),2):
        resulting_array1[lis][y]='result'
print(resulting_array1)

Output:-

[['result', 0, 'result', 0, 'result'], [0, 0, 0, 0, 0], ['result', 0, 'result', 0, 'result'], [0, 0, 0, 0, 0]]

Points to remember:-

(1) The elements of a NumPy array must all be of the same type. you can not change integer type to string type result

Code:-2 Using np array

import numpy as np
basearray=np.array([[10, 20, 30, 40, 50],
                     [15, 16, 17, 18, 19],
                     [25, 26, 27, 28, 29],
                     [35, 36, 37, 38, 39]])
resulting_array2=np.array([['0    ', '0', '0     ', '0', '0     '],
                           ['0', '0', '0', '0', '0'],
                           ['0    ', '0', '0    ', '0', '0    '],
                           ['0', '0', '0', '0', '0']])
for lis in range(0,len(basearray)-1,2):
    for y in range(0,len(basearray[0]),2):
        resulting_array2[lis][y]='result'
print(resulting_array2)

Output:-

[['result' '0' 'result' '0' 'result']
 ['0' '0' '0' '0' '0']
 ['result' '0' 'result' '0' 'result']
 ['0' '0' '0' '0' '0']]

Note you have to give spaces in 0 when initialising..!

i.e if you give two spaces with 0 it will return only res so to return result you have to write 0 with 4 spaces to print result

Updated query:-

check before this resulting_array2[lis][y]='result' using if statement

Code:-

for lis in range(0,len(basearray)-1,1):
    for y in range(0,len(basearray[0]),2):
        if len(basearray)-1>=lis and len(basearray[0])-1>=y:
            resulting_array2[lis][y]='result'

Upvotes: 0

Dani Mesejo
Dani Mesejo

Reputation: 61910

If I understood correctly, one approach is to do:

import numpy as np

basearray = np.array([[10, 20, 30, 40, 50],
                      [15, 16, 17, 18, 19],
                      [25, 26, 27, 28, 29],
                      [35, 36, 37, 38, 39]])

resulting_array = np.zeros((4, 5))

resulting_array[::2, ::2] = basearray[::2, ::2]
print(resulting_array)

Output

[[10.  0. 30.  0. 50.]
 [ 0.  0.  0.  0.  0.]
 [25.  0. 27.  0. 29.]
 [ 0.  0.  0.  0.  0.]]

Upvotes: 0

Related Questions