Я использую Python, и мне нужно найти наиболее эффективный способ выполнить следующую задачу.
Задание: Для любого одномерного массива v нулей и единиц обозначить k > = 0 количество подпоследовательностей всехиз v .
Мне нужно получить из v двумерный массив w такой, что:
1) shape (w) = (k, len (v)),
2) для каждого i = 1, .., k i-я строка «w» является массивом всех нулей, кроме i-й подпоследовательности всех единиц из v .
Позвольте мне привести пример: предположим, что $ v $ это массив
v=[0,1,1,0,0,1,0,1,1,1]
Тогда k = 3 и w должен быть массивом
w=[[0,1,1,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0,0,0],[0,0,0,0,0,0,0,1,1,1]]
Можно написать код для выполнения этой задачи разными способами, например:
import numpy as np
start=[]
end=[]
for ii in range(len(v)-1):
if (v[ii:ii+2]==[0,1]).all():
start.append(ii)
if (v[ii:ii+2]==[1,0]).all():
end.append(ii)
if len(start)>len(end):
end.append(len(v)-1)
w=np.zeros((len(start),len(v)))
for jj in range(len(start)):
w[jj,start[jj]+1:end[jj]+1]=np.ones(end[jj]-start[jj])
Но мне нужно выполнить эту задачу на очень большом массиве v и эта задача является частью функции, которая затем подвергается минимизации ... поэтому мне нужно, чтобы она была максимально эффективной и быстрой.
Итак, в заключение мой вопрос: каков наиболее эффективный способ вычисления?выполнить это на Python?