Python—唯一确定元素来自哪个文本文件

Python—唯一确定元素来自哪个文本文件,python,numpy,text-files,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]-如何唯一地确定它来自哪个文

我正在使用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         
因此,给定元素
[14]
,输出将是
datai.txt
,让我知道元素
[14]
源自
datai.txt
文件。

类似于:

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'

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

然后沿着横轴
所有

([9, 4] == Dj).all(1)
#>>> array([ True, False, False], dtype=bool)
然后检查轴是否匹配


使一个iterable只包含满足条件的数组,
next
获取第一个数组

如果您不喜欢捕捉
StopIteration

类似以下内容,可以使用
next(…,fallback)

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'

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

然后沿着横轴
所有

([9, 4] == Dj).all(1)
#>>> array([ True, False, False], dtype=bool)
然后检查轴是否匹配


使一个iterable只包含满足条件的数组,
next
获取第一个数组


您可以使用
next(…,fallback)
如果您不喜欢捕捉
StopIteration

您能举个例子吗?您能举个例子吗?