对于循环和矩阵,替换行

时间:2019-01-20 02:14:42

标签: python numpy

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

如果我有矩阵a=np.array([[1,1,1],[2,2,2],[3,3,3]]),我希望函数将其更改为a=[1,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" object is not iterable。将len(M)更改为range(len(M))只会输出与输入相同的矩阵。

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

为什么不只使用:

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

答案 1 :(得分:1)

U9-Forward's answer是理想的选择,但是由于您坚持要遍历数组...

只需删除new_array并遍历一个范围即可。

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_array = M,但是随后您又重新分配了M,这意味着new_array仍然指向旧的M。您也可以通过在重新分配new_array = M之后移动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)

答案 2 :(得分:0)

"use strict";

(function() {
  var url = "http://api.openweathermap.org/data/2.5/weather?q=London,England";
  var apiKey = "4ff5002c91520701ec111b6082de9387"; // This key might expire soon.
  var httpRequest;
  makeRequest();

  // create and send an XHR request
  function makeRequest() {
    httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = responseMethod;
    httpRequest.open('GET', url + '&appid=' + apiKey);
    httpRequest.send();
  }
  // handle XHR response
  function responseMethod() {
    if (httpRequest.readyState === 4) {
      console.log(httpRequest.responseText);
    }
  }
})();

在此任务中,您不需要“ new_array”