如何获取python numpy数组中包含列表的任何元素的索引?

bq3bfh9z  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(346)

我有一个numpy数组,里面有列表。这是我的numpy数组结构

array([list(['記', 'hk', '超抵', '玩', '轉台', '優惠', '無限', '任用']),
       list(['学生', '个人', '兼职', '援交', '加']), list(['轉', '台大', '優惠']), ...,
       list(['af', 'ia']), list(['交換', 'sourc']),
       list(['美食', 'cf', 'asm', '幾分'])], dtype=object)

我用过的

np.where(Arr=="ia")

但我没有得到任何指数回报。这是我的输出

(array([], dtype=int64),)

如何像普通numpy数组一样访问元素索引?提前谢谢。

4xy9mtcn

4xy9mtcn1#

numpy仅适用于长度相同的数组和列表。
您所能做的最好的事情就是将所有大小相同的列表追加 None 元素,然后使用numpy函数。使用这种方法的缺点是,如果有一个列表比其他列表大得多,则填充的数组将使用大量内存来保存虚拟数据 None 价值观
从这个答案中得到启发,您可以使用以下代码

a = np.array([list(['記', 'hk', '超抵', '玩', '轉台', '優惠', '無限', '任用']),
       list(['学生', '个人', '兼职', '援交', '加']), list(['轉', '台大', '優惠']),
       list(['af', 'ia']), list(['交換', 'sourc']),
       list(['美食', 'cf', 'asm', '幾分'])], dtype=object)
max_length = max(len(l) for l in a)
filled_array = np.array([l + [None] * (max_length-len(l)) for l in a])
print(np.where(filled_array=="ia"))
1cosmwyk

1cosmwyk2#

In [213]: Arr=np.array([list(['記', 'hk', '超抵', '玩', '轉台', '優惠', '無限', '任用']),
     ...:        list(['学生', '个人', '兼职', '援交', '加']), list(['轉', '台大', '優惠'])
     ...: ,
     ...:        list(['af', 'ia']), list(['交換', 'sourc']),
     ...:        list(['美食', 'cf', 'asm', '幾分'])], dtype=object)
In [214]: Arr
Out[214]: 
array([list(['記', 'hk', '超抵', '玩', '轉台', '優惠', '無限', '任用']),
       list(['学生', '个人', '兼职', '援交', '加']), list(['轉', '台大', '優惠']),
       list(['af', 'ia']), list(['交換', 'sourc']),
       list(['美食', 'cf', 'asm', '幾分'])], dtype=object)

使用常规python列表方法:

In [215]: for i,l in enumerate(Arr):
     ...:     print(i, 'ia' in l)
     ...: 
0 False
1 False
2 False
3 True
4 False
5 False

In [216]: for i,l in enumerate(Arr):
     ...:     if 'ia' in l:
     ...:         print(i,l.index('ia'))
     ...: 
3 1

对象数据类型数组基本上是一个列表,如果有的话,它的优点很少。 numpy 也没有太多自己的字符串方法。

相关问题