Векторизованный подход к селекции в алгоритме geneti c - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь закодировать метод скрещивания с одним кроссовером для алгоритма geneti c без явного l oop. Поэтому мне нужно добавить одну строку массива с другой строкой другого массива с желаемым результатом, как показано ниже. Обратите внимание, что массивы col_idx выбирают конкретные строки для размножения, в то время как массив индексов слайсов говорит нам, где вырезать (я хотел бы сохранить кусок массива вплоть до конечной точки).

a=np.arange(20).reshape(4,5)
print('a')
print(a)
a
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
b=np.arange(20).reshape(4,5)*100
print('b')
print(b)
b
[[   0  100  200  300  400]
 [ 500  600  700  800  900]
 [1000 1100 1200 1300 1400]
 [1500 1600 1700 1800 1900]]
row_idx_a=np.array([3,1,0,3,1,3]) #edit-fixed array
row_idx_b=np.array([1,1,0,0,0,3]) #edit-fixed array to fix error identified by the answer below 
slice_idx=np.array([2,1,0,4,4,3])
merged_array=np.zeros((4,5)) ######place holder for final array

#####now some creative slicing magic so that my final array is an irregular indexed addition#######

[[  15   16   17  800  900]
 [   5    6  700  800  900]
 [   0  100  200  300  400]
 [  15   16   17   18   19]
 [   5    6    7    8    9]
 [  15   16   17   18 1900]]

Мне трудно векторизовать эту проблему? Любой берущий? Спасибо.

1 Ответ

1 голос
/ 04 марта 2020

Предполагая, что биты в ожидаемом ответе, соответствующие отмеченным числам

                            *
row_idx_a=np.array([3,1,0,3,2,3])
row_idx_b=np.array([2,1,0,0,0,3])
                    *

, неверны.

np.where(np.less.outer(slice_idx,np.arange(5)),b[row_idx_b],a[row_idx_a])
# array([[  15,   16,   17, 1300, 1400],
#        [   5,    6,  700,  800,  900],
#        [   0,  100,  200,  300,  400],
#        [  15,   16,   17,   18,   19],
#        [  10,   11,   12,   13,   14],
#        [  15,   16,   17,   18, 1900]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...