从数组列表中切割每个数组的第三个元素(python)

时间:2017-04-16 17:52:42

标签: numpy slice

我有一个字典,其中“Groups”键的第一个元素包含一个数组列表。

stump['Groups'][0]

[array(['a', 65000, 0], dtype=object),
 array(['a', 95000, 1], dtype=object),
 array(['b', 78000, 1], dtype=object),
 array(['b', 19000, 1], dtype=object)]

我想切片每行的第三列并对它们进行一些操作。 所以第三列值为[0,1,1,1]。

stump['Groups'][0][:]
#results in the whole list
[array(['a', 65000, 0], dtype=object),
 array(['a', 95000, 1], dtype=object),
 array(['b', 78000, 1], dtype=object),
 array(['b', 19000, 1], dtype=object)]

但是,在[:]前添加另一个索引器/切片器,只需切片该列表的一部分。

无论如何要做这个没有循环?

谢谢。

2 个答案:

答案 0 :(得分:1)

列表理解应该做的工作:

[row[2] for row in stump['Groups'][0]]

并将列表作为数组使用:

np.array([...]) 

此列表的元素

array(['a', 65000, 0], dtype=object)

是对象dtype数组,与相同内容的列表大致相同。他们有不同的价值观。

如果将整个列表包装在np.array(或np.stack)中,则会得到一个二维对象dtype数组

In [58]: arr=np.array(alist)
In [59]: arr.shape
Out[59]: (4, 3)
In [60]: arr
Out[60]: 
array([['a', 65000, 0],
       ['a', 95000, 1],
       ['b', 78000, 1],
       ['b', 19000, 1]], dtype=object)

可以将其编入索引为任何其他2d数组:

In [61]: arr[:,2]
Out[61]: array([0, 1, 1, 1], dtype=object)

astype(int)可以将该对象数组转换为数字对象。由于字符串元素,无法转换完整的2d。

答案 1 :(得分:1)

list comprehension =>返回List对象

attr_accessor :name, :email

map function =>返回地图对象

column_list = [row[2] for row in stump['Groups'][0]]

itertools.imap function =>返回迭代器

column_map = map(lambda row: row[2], stump['Groups'][0])

numpy数组切片 - >返回numpy.array。 要求stump ['Groups'] [0]为numpy.array类型

column_iterator = itertools.imap(lambda row: row[2], stump['Groups'][0])