我正在尝试创建一个函数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))
只会输出与输入相同的矩阵。
我在做什么错了?
答案 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”