Python:为数组中的每个值分配单个值

时间:2014-12-28 14:53:33

标签: python arrays csv numpy concatenation

我是python的新手。对于 newprobValues 中的每个键,下面的代码根据csv数据集的输入创建一系列数值。我希望能够通过为每个 arange()函数创建哪些值,方法是为每个新数值赋值另一个值(即0,1,2)

现在,所有新的数值都会聚合到一个列表中,我会从该列表中随机抽取数字并在使用后删除它们(在心理学PsychoPy任务中)。来自任务的数据输出到另一个csv文件中,我希望在新数值列旁边有一个0,1和2列,以便我可以解析它们进行分析。

例如:     来自 newprobValues1 = np.arange(low1_p,high1_p,step = SV)的每个值都应该有一个与之关联的第二个值,这样我就可以将这些值输出到一个单独的列中。 csv文件。

代码:

newprobValues = {.17:[],
         .28:[],
         .54:[],
         .84:[],
         .96:[],
         .99:[],}

for npv in newprobValues: 
    mu = probs.ix[(probs['DDPD']==npv),['Value']]
    SV = hyperlaw(((1-npv)/npv), k_prob) #yields subjective value of one dollar at given delay
    mu = float(mu['Value'])
    generating_values_prob[npv] = {'mu':mu, 'SV':SV}
    if mu >= 25.50:
        #set desired ran
        low1_p, high1_p = float(mu-(4*SV)), float(mu-.01) # -.01 is hack to prevent arange() from      rounding uneven ceil() up to a fifth iteration
        low2_p, high2_p = float(mu+SV), float(mu+(5*SV)-.01) 
        low3_p, high3_p = 20.5, 80
        newprobValues1 = np.arange(low1_p, high1_p, step = SV) #generate hard values below indiff point
        newprobValues2 = np.arange(low2_p, high2_p, step = SV) #generate hard values above indiff point
        newprobValues3 = np.arange(low3_p, high3_p, step = 6.612)**
        newprobValues[npv] = np.concatenate([newprobValues1, newprobValues2, newprobValues3])
        newprobValues[npv] = np.insert(newprobValues[npv], 0, mu)
        newprobValues[npv] = newprobValues[npv].tolist()

我试过了代码:

    newprobValues1 = {'value': np.arange(low1_p, high1_p, step = SV), 'type': 0}

但我得到一个字典,其中包含0,当我真的需要为每个数字分配0时 - 这样当我连接shuffle数组时,我仍然可以识别生成每个值的arange()函数< / p>

2 个答案:

答案 0 :(得分:1)

我看到你用新计算的ndarray做的最后一件事是 使用其tolist()方法。

# last line of your code
newprobValues[npv] = newprobValues[npv].tolist()

如果你想要的是一个列表,你不需要经历箍 numpy ......更自然的方法是

newprobValues[npv].append(mu)
newprobValues[npv].append(newprobValues1)
newprobValues[npv].append(newprobValues2)
newprobValues[npv].append(newprobValues3)

稍后,如果您想使用序列号i,可以执行

result  = use(newprobValues[npv][i])

或使用列表解包

for npv in newprobValues:
    mu, seq1, seq2, seq3 = newprobValues[npv]
    ...

答案 1 :(得分:0)

我不确定这是你想要的,但是内置的enumerate()函数会生成一对值,每对的第一个成员是一个索引。因此,例如,enumerate([12, 35, 17)将生成序列(0, 12), (1, 35), (2, 17)

您是否可以更改为for循环阅读

for index, npv in enumerate(newprobValues):
    ...

    newprobValues1 = {'value': np.arange(low1_p, high1_p, step = SV), 'type': index}

我想知道?