ฉันต้องการสร้างอาร์เรย์ 2 มิติภายในฟังก์ชัน cdef
โดยมีจำนวนองค์ประกอบในแต่ละมิติ ขึ้นอยู่กับพารามิเตอร์ที่ส่งไปยังฟังก์ชัน เช่น.:
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
อย่างไรก็ตาม ดูเหมือนว่าการกำหนดให้กับ comb
และ nt
นิพจน์คงที่จะไม่ทำงาน เนื่องจากฉันได้รับข้อผิดพลาด "ไม่ได้รับอนุญาตในนิพจน์คงที่" ในบรรทัด int match[comb][nt]
การระบุค่าที่เกี่ยวข้องด้วยตนเอง (match[8][3]
สำหรับเช่น n=3
) อย่างไรก็ตาม นั่นไม่ใช่ตัวเลือก เนื่องจากค่าเหล่านี้เปลี่ยนแปลงไปในระหว่างโปรแกรม
อย่างที่สองคือ ดูเหมือนว่าฉันไม่เข้าใจวิธีการส่งคืนอาร์เรย์นี้ไปยังฟังก์ชัน cdef
หรือ def
อื่นใน .pyx
-script เดียวกัน: int[:,:]
ดูเหมือนจะไม่สอดคล้องกับอาร์เรย์ 2 มิติเหมือนกับที่ฉันต้องการเริ่มต้น
int[:,:]
เป็นไวยากรณ์สำหรับ memoryview ที่พิมพ์ รหัสแนะนำให้อ่าน/ทดลองใช้หน้าเอกสารนี้: cython.readthedocs.io/ en/latest/src/userguide/memoryviews.html - person hpaulj   schedule 05.06.2017def
ใน `pyx'-script ฉันอาจจะเก็บไว้ในสภาพแวดล้อม 'cdef' แต่ฉันจะไม่ใช้ค่าภายนอก Cython แน่นอน - person user3820991   schedule 06.06.2017c
มาตรฐานซึ่งแก้ไขเล็กน้อยด้วยไวยากรณ์cython
หรือไม่ - person hpaulj   schedule 06.06.2017cdef double[:,:] myarray = np.zeros((2**n, n))
จะแทนที่ส่วนการเริ่มต้นของฟังก์ชันของคุณ - person Pierre de Buyl   schedule 06.06.2017