【发布时间】:2017-04-13 02:36:41
【问题描述】:
我有一个名为“r2.csv”的示例 csv 文件:
Factory | Product_Number | Date | mu | cs | co
--------------------------------------------------------------
A | 1 | 01APR2017 | 5.6 | 125 | 275
--------------------------------------------------------------
A | 1 | 02APR2017 | 4.5 | 200 | 300
--------------------------------------------------------------
A | 1 | 03APR2017 | 6.6 | 150 | 250
--------------------------------------------------------------
A | 1 | 04APR2017 | 7.5 | 175 | 325
--------------------------------------------------------------
我有以下代码:
import numpy as np
from scipy.stats import poisson, norm
import csv
# Read Data
with open('r2.csv', 'r') as infile:
reader = csv.DictReader(infile)
data = {}
for row in reader:
for header, value in row.items():
try:
data[header].append(value)
except KeyError:
data[header] = [value]
# To create a list for the following parameters
mu = data['mu']
cs = data['cs']
co = data['co']
# Convert data type to 'float'
mu = map(float,mu)
cs = map(float,cs)
co = map(float,co)
Order_Number = map(lambda mu_,cs_,co_:np.ceil(poisson.ppf(co_/(cs_+co_),mu_)),mu,cs,co)
代码运行良好。如果我想定义一个可以按照您上面建议的那样用于数组的函数。
G = poisson(mu)
p = G.pmf(np.arange(3*mu))
def Z(Q):
for i in range(len(p)):
yield p[i]*cs*max((Q-i), 0) + p[i]*co*max((i-Q), 0)
如果我尝试运行它,它会显示错误消息。 **ValueError:只能将大小为 1 的数组转换为 Python 标量。 ** 谢谢!
此外,如果我想为每一行存储每对 (Q, sum(Z(Q))) ,我该怎么做?由于每行数据有多个 (Q, sum(Z(Q)); 让 Cost = sum(Z(Q)) 并且附加列名是 Q = 0, 1, 2, ...;值为 Cost,即 sum(Z(Q))
输出文件如下:
Factory | Product_Number | Date | mu | cs | co | Q=0 | Q=1 | ... | Q = 30
---------------------------------------------------------------------------------------
A | 1 | 01APR2017 | 5.6 | 125 | 275 |Cost |Cost |.....| Cost
---------------------------------------------------------------------------------------
A | 1 | 02APR2017 | 4.5 | 200 | 300|Cost |Cost |.....| Cost
---------------------------------------------------------------------------------------
A | 1 | 03APR2017 | 6.6 | 150 | 250|Cost |Cost |.....| Cost
---------------------------------------------------------------------------------------
A | 1 | 04APR2017 | 7.5 | 175 | 325|Cost |Cost |.....| Cost
---------------------------------------------------------------------------------------
如果输入只有一行数据,则以下代码运行正常,但对于多行或数组无用。
with open('output2.csv', 'wb') as fq:
csv_writer = csv.writer(fq, delimiter=',', lineterminator='\n', )
csv_writer.writerow(("Order_Number", "Cost Expectation"))
for Q in range(0, 30):
this_x = Q
this_y = sum(Z(Q))
x.append(this_x)
y.append(this_y)
csv_writer.writerow((this_x, this_y))
【问题讨论】:
-
什么都不懂。看起来像是一些先前讨论的摘录 - 但我不是心电感应者来推断缺失的部分。
-
@ivan_pozdeev 你是对的!我最初发布了另一个与此相关的问题,并得到了解决。但我遇到了新的麻烦。所以,再发一次……
-
@Chenxi:对于从
csv读取的每一行,您将有多个Q和sum(z(q))- 正确吗?您打算如何将它们存储在一条线上? , 可以用逗号分隔吗? -
@Chenxi:由于您使用的是
3*Order_Number,您将拥有那么多Q 和sum(z(Q))的值。所以你需要为此做好计划。可能会找到平均值/中位数?您可以在关键行打印以查看数据输出。 -
谢谢!@Anil_M 对,正如你所说,每个(Factory / Product_Number / Date / mu / cs / co)组合会有多对
Q, Z(Q),我想存储它到 csv 文件中,只需在先前的输入文件中再添加两列,这可行吗?
标签: python arrays function output