搜索多维数组

时间:2016-01-26 22:44:40

标签: python search numpy multidimensional-array

我有一个小模拟,它需要3个输入值,运行100次随机实现,并找出5次输出测量的平均值和标准差。

我需要以某种方式存储的输入和输出,以及易于搜索和绘制/分析不同输入参数集的输出的方式。

我目前有一个很大的23 *(输入参数组合数)数组,并尝试搜索,例如,使用第一个输出参数的平均值     mean_of_a = data[3][[data[0]==x] and [data[1]==y] and [data[2]==z]]

它似乎没有起作用,我确信必须有更有效的方法来做到这一点。有什么建议吗?

2 个答案:

答案 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]
  • 方括号用于构造列表或索引到上一个变量。您需要在比较周围使用圆括号。
  • 对于numpy数组,您需要使用按位和(==)而不是&,这仅对标量有效。

你想要更像这样的东西:

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])