我试图在numpy数组中传递一个列表,以便按照here
所解释的方式计算其方差我使用的例子是:
import numpy as np
A= np.array([])
newrow = [1,2,3]
A = np.concatenate((A,newrow))
print(np.var(A))
上面的示例有效但我无法将其应用于我的具体案例(见下文)
import csv
import numpy as np
f = open("training_stats.csv", 'r')
customers = csv.reader(f)
header = next(customers)
#I've tried with and without the .astype
A = np.array([]).astype(np.float)
for row in customers:
birth_date = row[10].split("-")[0]
print(birth_date)
A = np.append(A,birth_date)
print np.var(A)
这是返回的错误消息
TypeError: cannot perform reduce with flexible type
以下是我的列表:
1963
1975
1957
我知道我可以用这种方式计算方差:
var = mean(abs(x - x.mean())**2)
但是,我想了解这个numpy.array
的错误以及我传递给它的数据类型。
答案 0 :(得分:0)
数组A保存浮点数(如您所指定),客户持有字符串。您不能将字符串添加到浮点数组。你应该这样做:A = np.append(A,float(birth_date))
答案 1 :(得分:0)
在for循环后,执行以下操作:
A = A.astype(np.float)
你的csv阅读器将值作为字符串读取并转储到numpy数组中。即使你已经声明了一个浮点数组,但值是导致问题的字符串。
答案 2 :(得分:0)
import csv
import numpy as np
f = open("training_set.csv", 'r')
customers = csv.reader(f)
header = next(customers)
A = np.array([]).astype(np.int)
for row in customers:
birth_date = row[10].split("-")[0]
if birth_date != '':
A = np.append(A,float(birth_date))
print np.var(A)