Python - 独特地确定元素源自哪个文本文件

时间:2013-09-24 10:37:37

标签: python numpy text-files

我正在使用带代码的numpy加载三个单独的文本文件:

str = 'data'
Di = np.loadtxt(str+'i.txt', dtype=np.float64) 
Dj = np.loadtxt(str+'j.txt', dtype=np.float64)
Dk = np.loadtxt(str+'k.txt', dtype=np.float64)

文本文件包含带有2列和大约6000行的二维数据(它们都包含2列,但行数是可变的)。给定一个元素[a,b] - 我如何唯一地确定它来自哪个文本文件?

我无法完全确保这些元素是唯一的,但是数据[a,b]可能同时出现在(例如)datai和dataj文本文件中 - 但是它不太可能,但我无法统治它完全是。

编辑:

例如,在文本文件中加载会给出:

Di = [[1   4]      Dj = [[9   4]        Dk = [[2   4]       
      [1   5]            [5   5]              [5   6]
      [4   5]            [3   6]]             [4   7]]

      datai.txt          dataj.txt            datak.txt         

因此,给定元素[1 4],输出将为datai.txt,让我知道[1 4]文件中的元素datai.txt

1 个答案:

答案 0 :(得分:1)

类似的东西:

import numpy

Di = numpy.array([[1, 4], [1, 5], [4, 5]])

Dj = numpy.array([[9, 4], [5, 5], [3, 6]])

Dk = numpy.array([[2, 4], [5, 6], [4, 7]])
#>>> 

next(array for array in [Di, Dj, Dk] if ([5, 5] == array).all(1).any())
#>>> array([[9, 4],
#>>>        [5, 5],
#>>>        [3, 6]])

如果你想索引:

next(i for i, array in enumerate([Di, Dj, Dk]) if ([5, 5] == array).all(1).any())
#>>> 1

或名称:

next(k for k, array in {"Di":Di, "Dj":Dj, "Dk":Dk}.items() if ([5, 5] == array).all(1).any())
#>>> 'Dj'

([5, 5] == array).all(1).any()

是关键部分,它确实(使用[9,4]进行解释)

[9, 4] == array
#>>> array([[ True,  True],
#>>>        [False, False],
#>>>        [False, False]], dtype=bool)

然后沿着轴穿过all

([9, 4] == Dj).all(1)
#>>> array([ True, False, False], dtype=bool)

然后检查是否有任何轴匹配。


next(array for array in [Di, Dj, Dk] if CONDITION)

创建一个只包含那些满足CONDITION的数组的迭代,next得到第一个。

如果您不喜欢抓next(..., fallback),可以使用StopIteration