我正在使用带代码的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
。
答案 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
。