Python—唯一确定元素来自哪个文本文件
我正在使用numpy加载三个单独的文本文件,代码如下: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]-如何唯一地确定它来自哪个文
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
您能举个例子吗?您能举个例子吗?