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
,它将作为输入矩阵/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]
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