GSL을 고수하고 모든 벡터 좌표를 개별적으로 설정하지 않으려면 gsl_vector_subvector
에서 얻은 gsl_vector_view
을 사용할 수 있습니다.
이 목적을 위해 출력 벡터 gsl_vector를 모든 다른 벡터의 연결을 유지할만큼 충분히 할당하십시오. 그런 다음 이들 각각에 대해 gsl_vector_subvector
을 사용하여 출력 벡터 부분에 대한 gsl_vector_view를 얻습니다. 그 다음 해당 입력 부분에 대한 각 입력 벡터로부터 gsl_vector_memcpy
수 있습니다. gsl_vector_view는 vector
이라는 gsl_vector를 포함하는 구조체입니다.
#include <stdio.h>
#include <gsl/gsl_vector.h>
#define length1 4
#define length2 6
int main() {
/* allocate all vectors */
gsl_vector
*vectorIn1 = gsl_vector_alloc(length1),
*vectorIn2 = gsl_vector_alloc(length2),
*vectorOut = gsl_vector_alloc(length1+length2);
/* fill input vectors with some test data */
for (size_t index = 0; index < length1; ++index) {
gsl_vector_set(vectorIn1, index, -(double)index);
}
for (size_t index = 0; index < length2; ++index) {
gsl_vector_set(vectorIn2, index, (double)index);
}
/* perform the copy to portions of the output */
{
gsl_vector_view
viewOut1 = gsl_vector_subvector(vectorOut, 0, length1),
viewOut2 = gsl_vector_subvector(vectorOut, length1, length2);
gsl_vector_memcpy(&viewOut1.vector, vectorIn1);
gsl_vector_memcpy(&viewOut2.vector, vectorIn2);
}
/* display the result to see it is correct */
for (size_t index = 0; index < length1 + length2; ++index) {
printf("%3.1f\n", gsl_vector_get(vectorOut, index));
}
/* be nice and tidy: release resources after use */
gsl_vector_free(vectorOut);
gsl_vector_free(vectorIn2);
gsl_vector_free(vectorIn1);
}