1

我正在使用带有代码的 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文件。

4

1 回答 1

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)

使一个只包含满足条件的数组的可迭代,next获得第一个。

next(..., fallback)不喜欢抓的可以用StopIteration

于 2013-09-24T11:04:47.460 回答