尝试索引到Numpy数组时发生TypeError

时间:2019-11-30 17:27:46

标签: python database numpy

数据由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?

2 个答案:

答案 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.])