我有一个小模拟,它需要3个输入值,运行100次随机实现,并找出5次输出测量的平均值和标准差。
我需要以某种方式存储的输入和输出,以及易于搜索和绘制/分析不同输入参数集的输出的方式。
我目前有一个很大的23 *(输入参数组合数)数组,并尝试搜索,例如,使用第一个输出参数的平均值
mean_of_a = data[3][[data[0]==x] and [data[1]==y] and [data[2]==z]]
它似乎没有起作用,我确信必须有更有效的方法来做到这一点。有什么建议吗?
答案 0 :(得分:1)
假设您的矩阵为<?php
$destination_path = $_REQUEST["destination"] . "upload/";
$target_path = "" . $destination_path;
$target_path = $target_path . 'msg1.txt';
$_POST['dest_name'];
echo "User=" . $_ENV[USER] . "<br />";
echo "Source=" . $_FILES['uploadedfile']['name'] . "<br />";
echo "Destination=" . $destination_path . "<br />";
echo "Target path=" . $target_path . "<br />";
echo "Size=" . $_FILES['uploadedfile']['size'] . "<br />";
//echo "Tmp name=" . $_FILES['uploadedfile']['tmp_name'] . "<br />";
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
?>
,那么您的布尔索引在当前形式中存在一些问题:
(parameters, repetitions)
将data[0]=x
的值分配给x
。要测试相等性,您需要使用data[0]
。==
)而不是&
,这仅对标量有效。你想要更像这样的东西:
and
使用numpy数组,一次性完成所有索引的效率更高,而不是#34;链接&#34;你的索引操作。
mean_of_a = data[3][(data[0] == x) & (data[1] == y) & (data[2] == z)].mean()
应返回一个布尔向量,其长度与(data[0] == x) & (data[1] == y) & (data[2] == z)
中的列数相同。因此,您可以使用它直接索引到data
的第二维,而不是首先索引第4行:
data
答案 1 :(得分:0)
管理结构化数据时遇到问题。这似乎是namedtuple
的一个很好的用例,它是一个类的简单版本。
from collections import namedtuple
Input = namedtuple('Input', ['x', 'y', 'z'])
Output = namedtuple('Output', ['v1', 'v2', 'v3', 'v4', 'v5'])
results = []
for i in range(100):
input = Input(x, y, z)
# do your thing
output = Output(v1, v2, v3, v4, v5)
results.append((input, output))
现在您有一个输入/输出配对列表。您可以使用点表示法迭代并访问这些成员。
例如 - 假设您使用numpy
:
import numpy
print 'v1 mean', numpy.mean([r[1].v1 for r in results])
print 'v2 mean', numpy.mean([r[1].v2 for r in results])