数据由10个值组成,我想对其进行扩展以使尺寸相等。
import numpy as np
W = 17
cen = 80
dim = 20
E= np.zeros((dim))
for i in range(len(data)):
data[i] = E((cen - np.round(W*2.21*2)) + np.round(i*2.21*2))
print(data)
我收到以下错误:
TypeError: 'numpy.ndarray' object is not callable
但是如果我删除E
,它会显示输出。
在MATLAB中,其编写方式如下
W = 17
cen = 80
dim = 20
E=zeros(1,dim);
for i=1:length(data)
E((center-round(W*2.21*2))+round(i*2.21*2))=data(i);
end
为什么会出现此TypeError?
答案 0 :(得分:0)
调用E时,必须在python中通过[] e而不是()来访问其元素。
E[(cen - np.round(W*2.21*2)) + np.round(i*2.21*2)]
答案 1 :(得分:0)
正如已经指出的,与Matlab相比,Python / numpy中的数组索引有所不同,请参见例如https://fantasy.premierleague.com/statistics?fbclid=IwAR1vShDx0eEefTus-dcxA6anpurcmxz2p4fKHcq1uu9xLj54BYhdpF4pxvc。
您遇到的下一个问题是np.round
返回一个浮点数,您不能将其用于索引。您必须将其强制转换为整数。另一件事是,您可以避免在此处产生循环,这很可能会提高性能。结合起来,您的代码可能看起来像
import numpy as np
W = 17
cen = 80
dim = 100 # needed to increase this since calculated indices must be in range
data = np.repeat([999], 10) # generate some toy data
result = np.zeros(dim) # initialize result as array of zeros
# calculate the indices where to assigen data to result, no loop needed
indices = (cen -
np.round(W*2.21*2) +
np.round(np.indices(data.shape)*2.21*2)).astype(np.int32)
# assign the values
result[indices] = data
结果将看起来像
result
Out[23]:
array([ 0., 0., 0., 0., 0., 999., 0., 0., 0., 999., 0.,
0., 0., 0., 999., 0., 0., 0., 999., 0., 0., 0.,
0., 999., 0., 0., 0., 999., 0., 0., 0., 0., 999.,
0., 0., 0., 999., 0., 0., 0., 999., 0., 0., 0.,
0., 999., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0.])