Matlab yapısında bir alanda saklanan matrisin mex işlevinden nasıl erişileceğini anlamaya çalışıyorum. çok uzun soluklu oluyorMatlab yapısındaki bir matris bir mex işlevinden nasıl erişilir?
... Açıklayayım:
aşağıdaki gibi tanımlanmış bir matlab yapı var: Ben olmak istiyorum hangi bir mex fonksiyonu var
matrixStruct = struct('matrix', {4, 4, 4; 5, 5, 5; 6, 6 ,6})
Matristeki ilk elemana bir işaretçi atama (matris [0] [0], c cinsinden), ancak bunu nasıl yapacağımı anlayamadım.
denedim aşağıdadır:
/* Pointer to the first element in the matrix (supposedly)... */
double *ptr = mxGetPr(mxGetField(prhs[0], 0, "matrix");
/* Incrementing the pointer to access all values in the matrix */
for(i = 0; i < 3; i++){
printf("%f\n", *(ptr + (i * 3)));
printf("%f\n", *(ptr + 1 + (i * 3)));
printf("%f\n", *(ptr + 2 + (i * 3)));
}
Bunun yazdırma biter takip ediyor: belki de birlikte sakat bir şey olduğunu düşünerek, aşağıdakilerden
4.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
Ben de denedim varyasyonlar iç içe geçmiş işlev çağrıları, ancak boşuna:
Ne yapmaya çalıştığımı veya neyi yanlış yaptığımı nasıl anlayabilirim?
Teşekkürler!
Düzenleme: Her bir kullanıcının yorumuna göre, tek boyutlu bir ikilelik dizisi olan array adlı alana sahip bir yapıda benzer işlemler yapmayı denedim.
aşağıdaki gibi diziyi içeren yapı tanımlanır:
arrayStruct = struct('array', {4.44, 5.55, 6.66})
Ben mex işlev içinde arrayStruct aşağıdaki çalıştı:
mptr = mxGetPr(mxGetField(prhs[0], 0, "array"));
printf("%f\n", *(mptr));
printf("%f\n", *(mptr + 1));
printf("%f\n", *(mptr + 2));
... ama çıkış neydi izledi Daha önce basılmış:
Sadece bazı düşüncelerle mex dosyaları hakkında çok fazla deneyimim yok. MATLAB içindeki hücre dizisi olan değişkene erişmeye çalışıyorsunuz. Sonuçta verilerin saklandığından emin misiniz? Yapının içine çift dizi koyarsanız ne olur? matrixStruct = struct ('matrix', [4, 4, 4; 5, 5, 5; 6, 6, 6]) ' – yuk
yuk - Bana sorduğum soruya eklediklerim var mı? yap. –
Hayır, hala hücre dizisini tanımladınız. Bunu denemenizi isterim: 'arrayStruct = struct ('array', [4.44, 5.55, 6.66])'. Köşeli parantezlere dikkat edin [], değil {}. – yuk