def createAdversarialSignal(startIdxs, endIdxs, signalLength):
assert(len(startIdxs) == len(endIdxs))
numInstances = len(startIdxs)
# avgLength =
pairs = np.arange(numInstances)
if len(pairs) % 2 != 0: # handle odd numbers of instances
pairs = np.append(pairs, np.random.choice(pairs)) # duplicate some idx
np.random.shuffle(pairs)
pairs = pairs.reshape((-1, 2)) # random
out = np.zeros(signalLength)
for pair in pairs:
start1, end1 = startIdxs[pair[0]], endIdxs[pair[0]]
start2, end2 = startIdxs[pair[1]], endIdxs[pair[1]]
length1 = end1 - start1 # end idxs not inclusive
length2 = end2 - start2
subseq = randwalk(length1)
negSeq = -subseq
if length1 != length2:
negSeq = signal.resample(negSeq, length2)
out[start1:end1] = subseq
out[start2:end2] = negSeq
return out
# ================================================================
# Create particular synthetic datasets (for prototyping / smoke testing)
# ================================================================
评论列表
文章目录