简体   繁体   中英

How to copy the next row from the previous row in matrix by using python?

I would like to ask you how to copy the rows to the next rows in matrix by using python. I tried however the result is not as expected. Here is the coding and the expected result. Thank you in advance.

import numpy as np
Total_T = 6
Total_P = 8

M0 = np.array([[0,0,0,0,0,1,1,1]])


M = np.random.randint(10,size = (Total_T, Total_P))
for k in range(0,Total_T):
    for l in range (0,Total_P):
        if k == Total_T-1:
            M[Total_T-1][l] = M0[0][l]
        #if k == 0:
            #M[0][l] = M0[0][l]
        else:
            M


M_prev = np.empty((Total_T, Total_P), dtype = object)
if M is not None:
  for k in range(0,Total_T):
    for l in range (0,Total_P):
        if k == 0:
            M_prev[0][l] = M0[0][l]
        else:
            M_prev = M[:].copy()

The result of M:
array([[4, 8, 1, 6, 2, 4, 9, 6],
       [3, 9, 1, 6, 9, 2, 7, 1],
       [9, 4, 5, 9, 3, 5, 1, 2],
       [8, 3, 5, 2, 8, 5, 4, 8],
       [6, 3, 4, 3, 7, 9, 8, 4],
       [0, 0, 0, 0, 0, 1, 1, 1]])

The expected result of M_prev:
array([[0, 0, 0, 0, 0, 1, 1, 1],
       [4, 8, 1, 6, 2, 4, 9, 6],
       [3, 9, 1, 6, 9, 2, 7, 1],
       [9, 4, 5, 9, 3, 5, 1, 2],
       [8, 3, 5, 2, 8, 5, 4, 8],
       [6, 3, 4, 3, 7, 9, 8, 4]])

However the result of M_prev from the coding:
array([[4, 8, 1, 6, 2, 4, 9, 6],
       [3, 9, 1, 6, 9, 2, 7, 1],
       [9, 4, 5, 9, 3, 5, 1, 2],
       [8, 3, 5, 2, 8, 5, 4, 8],
       [6, 3, 4, 3, 7, 9, 8, 4],
       [0, 0, 0, 0, 0, 1, 1, 1]])

It looks like you're overcomplicating things a lot…

import numpy as np
Total_T = 6
Total_P = 8

M0 = np.array([[0,0,0,0,0,1,1,1]])

# for reproducibility
np.random.seed(0)
# generate random 2D array
M = np.random.randint(10, size=(Total_T, Total_P))

# replace last row with M0
M[-1] = M0

# roll the array
M_prev = np.roll(M, 1, axis=0)

output:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM