我正在嘗試爲遺傳算法做一個統一的順序交叉。在那裏,我有兩個二維數組p1和p2以及一個二維比特數組b。 p1,p2和b具有相同的形狀。我掩飾p1中的元素,對應於b中的1,p2中的元素對應於b中的0。從這些,我需要生成2個矩陣c1和c2,使得c1具有與p2中相同的元素,但是根據p1中給出的順序將空白替換爲p2中的對應值,而對於c1則爲相反。Python numpy根據另一個矩陣中的順序填充矩陣中的蒙面元素
例如:
p1 = [[1, 2, 3, 4, 5],
[1, 4, 3, 2, 5]]
p2 = [[5, 4, 3, 2, 1],
[2, 1, 3, 4, 5]]
b = [[1, 0, 1, 0, 1],
[1, 0, 0, 1, 0]]
掩蔽陣列是MP1和MP2;
mp1 = [[1, _, 3, _, 5],
[1, _, _, 2, _]]
mp2 = [[_, 4, _, 2, _],
[_, 1, 3, _, 5]]
然後C1和C2是,
c1 = [[1, 4, 3, 2, 5],
[1, 3, 4, 2, 5]]
c2 = [[1, 4, 3, 2, 5],
[4, 1, 3, 2, 5]]
P1,P2,B,C1,C2是在我的情況維500X100000的,所以答案需要進行矢量化和高效。
我目前做: C1,C2 = p2.copy,p1.copy 然後: 爲指數範圍(c1.shape [0]): C1 [指數] [一B [索引]] = p1 [索引] [np.in1d(p1 [索引],p2 [索引] [〜b]] 但修改c1的副本而不是c1的直接,所以我無處可去 – Aditya369