为了访问2D numpy数组的第二维,我们可以使用例如
A[:,0:9]
我们怎么能这样做到2D列表呢?
答案 0 :(得分:0)
浪费但应该工作:
list(zip(*(list(zip(*A))[0:9])))
使用itertools.isclice
稍微更经济:
list(zip(*(itertools.islice(zip(*A), 0, 9))))
或者可以使用map
和operator.itemgetter
:
list(map(operator.itemgetter(slice(0,9)), A))
答案 1 :(得分:0)
数组和嵌套列表版本:
In [163]: A=np.arange(12).reshape(3,4)
In [164]: Al = A.tolist()
对于切片索引,列表推导(或映射等效)工作正常:
In [165]: A[:,1:3]
Out[165]:
array([[ 1, 2],
[ 5, 6],
[ 9, 10]])
In [166]: [l[1:3] for l in Al]
Out[166]: [[1, 2], [5, 6], [9, 10]]
对于高级索引,列表需要进一步的迭代级别:
In [167]: A[:,[0,2,3]]
Out[167]:
array([[ 0, 2, 3],
[ 4, 6, 7],
[ 8, 10, 11]])
In [169]: [[l[i] for i in [0,2,3]] for l in Al]
Out[169]: [[0, 2, 3], [4, 6, 7], [8, 10, 11]]
同样有各种映射选择。
In [171]: [operator.itemgetter(0,2,3)(l) for l in Al]
Out[171]: [(0, 2, 3), (4, 6, 7), (8, 10, 11)]
itemgetter
使用tuple(obj[i] for i in items)
生成这些元组。
奇怪的是,itemgetter
返回列表索引的元组,并列出切片:
In [176]: [operator.itemgetter(slice(1,3))(l) for l in Al]
Out[176]: [[1, 2], [5, 6], [9, 10]]