У меня есть класс «Sample», в котором хранятся данные. Я хочу заполнить эти данные влево, вправо и по центру. Я не публикую код для Sample, потому что уверен, что проблема не в этом. (Если это необходимо, я сделаю это.) Следующий код показывает, как я поступаю.
val hline_magf = SampleUtils.getDataFromOneFile("C:\\Users\\XXXX\\Desktop\\test\\hline.421.magf.csv")
val adj_ts = Preprocess.adjustTimestamps(hline_magf)
val abs = Preprocess.abs(adj_ts)
var lerp = Preprocess.lerp(abs)
val lh = Preprocess.hanning_window(lerp)
val lhl = Preprocess.pad_left(lh) // these cause the problems somewhere
val lhr = Preprocess.pad_right(lh)
val lhm = Preprocess.pad_center(lh)
Первые шаги формируют данные и работают хорошо. (Все функции preprocess принимают Sample-объекты и возвращают Sample-объекты.) Но как только я использую одну из pad-функций, другие pad-функции больше не работают.
Если я дополняю влево, то lhr и lhm также дополняются влево, если я дополняю вначале вправо, остальные также дополняются вправо.
Функции пэда работают, как и предполагалось, когда ставятся на первое место, я протестировал три варианта.
Вот как выглядят функции:
fun pad_left(sample: Sample): Sample {
var ret_val = sample
println("#### pad left")
while (ret_val.timestamp.size < MAX_LEN) ret_val.timestamp = doubleArrayOf(0.0) + ret_val.timestamp
while (ret_val.absoluteSquare_float.size < MAX_LEN) ret_val.absoluteSquare_float = floatArrayOf(0.0f) + ret_val.absoluteSquare_float
while (ret_val.x_float.size < MAX_LEN) ret_val.x_float = floatArrayOf(0.0f) + ret_val.x_float
while (ret_val.y_float.size < MAX_LEN) ret_val.y_float = floatArrayOf(0.0f) + ret_val.y_float
while (ret_val.z_float.size < MAX_LEN) ret_val.z_float = floatArrayOf(0.0f) + ret_val.z_float
return ret_val
}
EDIT:
Благодаря Йоль. Я добавил метод copy () в мой класс, который возвращает новый объект.