Python 对于循环和矩阵,替换行

Python 对于循环和矩阵,替换行,python,numpy,Python,Numpy,我试图创建一个函数first_rpt,它将作为输入矩阵/arrayM,并输出一个数组,将矩阵中的每一行更改为第0行(第一行)中的值 如果我有矩阵a=np.array([[1,1,1],[2,2],[3,3,3]])我希望函数将其更改为a=[1,1,1],[1,1,1],[1,1] def first_rpt(M): new_array=M M=np.array(M) for i in len(M): M[i]=M[0]

我试图创建一个函数
first_rpt
,它将作为输入矩阵/array
M
,并输出一个数组,将矩阵中的每一行更改为第0行(第一行)中的值

如果我有矩阵
a=np.array([[1,1,1],[2,2],[3,3,3]])
我希望函数将其更改为
a=[1,1,1],[1,1,1],[1,1]

def first_rpt(M):  
    new_array=M    
    M=np.array(M)    
    for i in len(M):    
    M[i]=M[0]    
    return new_array
此代码返回错误
“int”对象不可编辑。将
len(M)
更改为
range(len(M))
只输出输入的相同矩阵

我做错了什么?

为什么不直接使用:

>>> import numpy as np
>>> a=np.array([[1,1,1],[2,2,2],[3,3,3]])
>>> def first_rpt(M):
    M[1:]=M[0]
    return M

>>> first_rpt(a)
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
>>> 
是理想的,但由于您坚持在数组上迭代

只需删除
new_数组
,并在一个范围内迭代即可

def first_rpt(M):
    for i in xrange(len(M)):  # "xrange" in case the array is very big
        M[i] = M[0]
    return M
在您的代码中,您分配了
new\u array=M
,但随后您重新分配了
M
,这意味着
new\u array
将指向旧的
M
。您也可以通过在重新分配
M
后移动
new\u array=M
来解决此问题,但没有意义


完整测试代码

import numpy as np

def first_rpt(M):
    for i in xrange(len(M)):
        M[i] = M[0]
    return M

a = np.array([[1,1,1], [2,2,2], [3,3,3]])
print first_rpt(a)

在这个任务中,你不需要一个“新的数组”

只要试一下
a[1:]=a[0]
你不应该返回
M
?这样就行了,但是我正在为一个python类做这件事,他们希望它特别涉及for循环。。。他们通常会在容易的时候要求这些事情。@Ryan这是最容易的,整个事情就是:
M[1:]=M[0]
,但是你想要循环。。。使用已接受的答案。您忘记了
返回M
def first_rpt(M):  
   for i in range(1, len(M)):    
      M[i]=M[0]    
   return