0s
및로 채워진 가변 길이의 파이썬 목록이 1s
있습니다.
모든 1s
것이 특정 .csv로 확장되는 새 목록을 만들고 싶습니다 offset
.
예 :
offset = 1
l1 = [0,0,1,0]
l1_new = l[0,1,1,1]
l2 = [1,0,0,0,1,0,1,0,0]
l2_new = [1,1,0,1,1,1,1,1,0]
내 솔루션 코드는 그리 빠르지 않으며 numpy / vectorization / bitwise 연산도 사용하지 않습니다. 그러나 이러한 방법 중 일부는 여기에 적용 할 수 있어야한다고 생각합니다.
offset = 1
l_old = [0,0,1,0]
l_new = []
for i,l in enumerate(l_old):
hit = False
for o in range(offset+1)[1:]:
if (i+o<len(l_old) and l_old[i+o]) or (i>0 and l_old[i-o]):
hit = True
break
if hit or l_old[i]:
l_new.append(1)
else:
l_new.append(0)
힌트 :이 솔루션은 어떤의 목록을 빠르고 일반적인해야
0s
하고1s
어떤 및offset
다음은 선형 (O (n + offset)) 시간 솔루션입니다.
import numpy as np
def symm_dil(a,hw):
aux = np.zeros(a.size+2*hw+1,a.dtype)
aux[:a.size] = a
aux[2*hw+1:] -= a
return np.minimum(aux.cumsum(),1)[hw:-hw-1]
#example
rng = np.random.default_rng()
a = rng.integers(0,2,10)
print(a)
print(symm_dil(a,2))
샘플 출력 :
[0 0 0 1 0 0 0 0 0 1]
[0 1 1 1 1 1 0 1 1 1]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다