保留索引列表

时间:2017-11-21 19:33:37

标签: python

如果我有以下数组:

T = array([[list([2])],
          [list([])],
          [list([0])]], dtype=object)

我想要发生的是当我输入T[0]时,我希望返回索引[2]。目前我得到array([list([2])], dtype=object.

我不想要列表,圆括号,其他文字,我只想要[2]

##下面的其他信息(编辑)

我有一个更复杂的案例我想尝试这个但是先创建一个简单的例子来看看这个概念是否有效并且是我遇到麻烦的地方。 我有以下功能,您可以在其中指定要搜索的集合,并提供具有您要查找的ti元素的集合。 然后,该函数返回找到值的主集合中的索引。

find = lambda searchList, elem: [[i for i, x in enumerate(searchList) if     x == e] for e in elem]

我想要研究的主要组合由两个字符串数组组成,然后连接成一个3 x 2数组。

A = np.array([['A'], ['B'],['C'], ['D']])` # main set 1
array([['A'],
       ['B'],
       ['C'],
       ['D']],
      dtype='<U1')

D = np.array([['E'], ['F'],['G'], ['H']]) # main set 2

array([['E'],
       ['F'],
       ['G'],
       ['H']],
      dtype='<U1')


F = np.column_stack((A,D)) # Combined Array - The main set in which to look through using the find function.
array([['A', 'E'],
       ['B', 'F'],
       ['C', 'G'],
       ['D', 'H']],
      dtype='<U1')

我用一个组合的搜索集(由两个较小的集合组成)完成了相同的操作

C = np.array([['C'], ['D'], ['A']])

E = np.array([['G'], ['D'], ['E']])
G = np.ndarray.tolist(F)

我想将它们组合成一个数组并将它们并排放置,3行,2列。

H = np.column_stack((C,E))
array([['C', 'G'],
       ['D', 'D'],
       ['A', 'E']],
      dtype='<U1')

当我应用find函数时,它确实会返回元素在主数组中的索引。

T = find(G, I)
array([list([2]), list([]), list([0])], dtype=object)

现在,我创建了另一个数组,其中只有数字1,2,3和4

B = np.array([[1],[2],[3],[4]])

我想在搜索功能中使用返回给我的索引,即

[2], [] (blank) and [0]

从数组B中提取数字并将它们存储在单独的数组中 即我想要L = [3],[],[1]

使用:     L = np.empty([len(I),1])

for j in range(len(H)):
  L[j] = B[T[j]]

然而我收到错误:

L[j] = B[T[j]]
ValueError: could not broadcast input array from shape (0,1) into shape (1)

2 个答案:

答案 0 :(得分:2)

您需要正确索引元素。以下是嵌套列表的各个级别:

>>> import numpy as np
>>> T = np.array([[list([2])],
...     [list([])],
...     [list([0])]], dtype=object)
>>> T
array([[[2]],
       [[]],
       [[0]]], dtype=object)
>>> T[0]
array([[2]], dtype=object)
>>> T[0][0]
[2]
>>> T[0][0][0]
2

看看它是如何工作的?

如果你想要T [0]为2,那么你需要使2成为列表的第一个元素,而不是包含含有2的列表的列表。例如:

>>> S = np.array([2, None, 0])
>>> S
array([2, None, 0], dtype=object)
>>> S[0]
2

答案 1 :(得分:-1)

使用给定的确切数据的解决方案是T [0] [0]; T [0]返回数组([list([2])],并且取零的元素返回[2](并且取零的元素返回2)。但是,它不清楚这是什么应用程序(和引用) [2]作为“索引”会引发红色标记。。提供更大的上下文可能会更好,并获得有关如何实现更大目标的建议。例如,如果将其存储为Series或DataFrame,则可以将[2]存储为名称,然后以该方式访问它,而不是向下钻取数组中的多个图层。