假设我有一个矩阵B:
B = [
[0, 1, 2],
[2, 3, 4],
[5, 6, 7]
]
和矢量a:
a = [0,0,1,1,2]
我需要定义一个新的向量C,使得它重复B中的行,如a,即,
所指定的那样。C = [
[0, 1, 2],
[0, 1, 2],
[2, 3, 4]
[2, 3, 4],
[5, 6, 7]
]
在Python中是否有一个技巧命令来执行此操作?
答案 0 :(得分:4)
您可以在此a
使用>>> import numpy as np
>>> b = np.array([
[0, 1, 2],
[2, 3, 4],
[5, 6, 7]
])
>>> a = [0,0,1,1,2]
>>> b[a]
array([[0, 1, 2],
[0, 1, 2],
[2, 3, 4],
[2, 3, 4],
[5, 6, 7]])
。
>>> B = [
[0, 1, 2],
[2, 3, 4],
[5, 6, 7]
]
>>> [B[x][:] for x in a]
[[0, 1, 2], [0, 1, 2], [2, 3, 4], [2, 3, 4], [5, 6, 7]]
来自index array:
对于索引数组的所有情况,返回的是副本 原始数据,而不是切片获取的视图。
在纯Python中,您可以使用列表推导:
[:]
请注意,copy.deepcopy
会返回列表的浅表副本,如果列表包含可变对象,则您必须使用{{1}}来获取全新的副本。
答案 1 :(得分:0)
使用map()
迭代a
的所有元素,并从B
获取相应的列表:
C = map(lambda x: B[x], a)
请注意C
的元素只会引用B
行。这可能是您想要的行为。如果您需要元素的真实副本,可以在lambda中返回B[x][:]
以进行一次复制,或使用copy.deepcopy()
获取完整副本。