Saya ingin membuat array 2D dalam fungsi cdef
dengan jumlah elemen di setiap dimensi bergantung pada parameter yang diteruskan ke fungsi tersebut. Misalnya.:
cdef int[:,:] c_volumecheck(int n):
cdef:
const int comb = 2**n
const int nt = n
int match[comb][nt]
size_t i,j
# initialize values
for i in range(comb):
for j in range(n):
match[i][j] = 0
return match
Namun, menetapkan ekspresi konstan ke comb
dan nt
sepertinya tidak berfungsi karena saya mendapatkan kesalahan "Tidak diizinkan dalam ekspresi konstan" di baris int match[comb][nt]
. Memberikan nilai masing-masing secara manual berfungsi (match[8][3]
misalnya n=3
). Namun hal ini bukanlah suatu pilihan, karena nilai-nilai ini berubah selama program berlangsung.
Hal kedua adalah, sepertinya saya tidak mengerti cara mengembalikan array ini ke fungsi cdef
atau def
lain dalam skrip .pyx
yang sama: int[:,:]
sepertinya tidak sesuai dengan array 2d seperti yang ingin saya inisialisasi.
int[:,:]
adalah sintaks untuk tampilan memori yang diketik; Saya sarankan membaca/bereksperimen dengan halaman dokumen ini: cython.readthedocs.io/ en/latest/src/userguide/memoryviews.html - person hpaulj   schedule 05.06.2017def
di skrip `pyx'. Saya mungkin bisa menyimpannya dalam lingkungan 'cdef'. Tapi saya pasti tidak akan menggunakan nilai di luar cython. - person user3820991   schedule 06.06.2017c
standar, dimodifikasi sedikit dengan sintakscython
? - person hpaulj   schedule 06.06.2017cdef double[:,:] myarray = np.zeros((2**n, n))
akan menggantikan bagian inisialisasi fungsi Anda. - person Pierre de Buyl   schedule 06.06.2017