คำถามติดแท็ก matlab

MATLAB เป็นภาษาระดับสูงและสภาพแวดล้อมการเขียนโปรแกรมเชิงโต้ตอบสำหรับการคำนวณเชิงตัวเลขและการสร้างภาพที่พัฒนาโดย MathWorks อย่าใช้ทั้งแท็ก [matlab] และ [อ็อกเทฟ] เว้นแต่คำถามจะชัดเจนเกี่ยวกับความเหมือนหรือความแตกต่างระหว่างทั้งสอง เมื่อใช้แท็กนี้โปรดระบุรุ่น MATLAB ที่คุณใช้งานด้วย (เช่น R2017a)

3
เหตุใด numpy std () จึงให้ผลลัพธ์ที่แตกต่างกับ matlab std ()
ฉันพยายามแปลงรหัส matlab เป็น numpy และพบว่า numpy มีผลลัพธ์ที่แตกต่างกับฟังก์ชัน std ใน matlab std([1,3,4,6]) ans = 2.0817 เป็นตัวเลข np.std([1,3,4,6]) 1.8027756377319946 เป็นเรื่องปกติหรือไม่? และควรจัดการกับเรื่องนี้อย่างไร?

8
ฉันจะวนซ้ำแต่ละองค์ประกอบในเมทริกซ์ n มิติใน MATLAB ได้อย่างไร
ฉันมีปัญหา. ฉันต้องการวนซ้ำทุกองค์ประกอบในเมทริกซ์ n มิติใน MATLAB ปัญหาคือฉันไม่รู้ว่าจะทำอย่างไรกับจำนวนมิติโดยพลการ ฉันรู้ว่าฉันพูดได้ for i = 1:size(m,1) for j = 1:size(m,2) for k = 1:size(m,3) และอื่น ๆ แต่มีวิธีทำตามจำนวนมิติโดยพลการหรือไม่?

5
Matlab Vectorization - ไม่มีเมทริกซ์ดัชนีแถวเข้าสู่เซลล์
ฉันทำงานกับ Matlab ฉันมีเมทริกซ์จตุรัสไบนารี่ สำหรับแต่ละแถวมี 1 รายการหรือมากกว่าเป็น 1 ฉันต้องการผ่านแต่ละแถวของเมทริกซ์นี้และส่งกลับดัชนีของ 1s เหล่านั้นและเก็บไว้ในรายการของเซลล์ ฉันสงสัยว่ามีวิธีการทำเช่นนี้โดยไม่ต้องวนซ้ำแถวทั้งหมดของเมทริกซ์นี้หรือไม่เนื่องจากการวนซ้ำช้ามากใน Matlab ตัวอย่างเช่นเมทริกซ์ของฉัน M = 0 1 0 1 0 1 1 1 1 ในที่สุดฉันก็ต้องการสิ่งที่ต้องการ A = [2] [1,3] [1,2,3] ดังนั้นAเซลล์ มีวิธีการที่จะบรรลุเป้าหมายนี้โดยไม่ใช้ลูปโดยมีจุดประสงค์ในการคำนวณผลลัพธ์ได้เร็วขึ้นหรือไม่?

1
MATLAB ไม่ยกเลิกการโหลดไฟล์ MEX หลังจากอัปเกรดเป็น macOS Mojave
ใน MATLAB ให้clear mexยกเลิกการโหลดไฟล์ MEX ทั้งหมดจากหน่วยความจำ (เว้นแต่ว่าพวกเขาจะถูกล็อค) ภายใต้ macOS เวอร์ชันก่อนหน้าฉันสามารถคอมไพล์ไฟล์ MEX อีกครั้งและรันเวอร์ชันที่แก้ไขโดยไม่ต้องรีสตาร์ท MATLAB เพียงแค่ออกclear mexคำสั่ง สิ่งนี้ไม่สามารถทำได้ใน Mojave อีกต่อไป ตัวอย่างเช่นใช้ไฟล์ MEX เล็กน้อย ( get_data_pointer.c): #include "mex.h" void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { plhs[0] = mxCreateNumericMatrix(1, 1, mxUINT64_CLASS, mxREAL); *(uint64_t*)mxGetData(plhs[0]) = (uint64_t)mxGetData(prhs[0]); } เราสามารถสร้างไฟล์ MEX …

5
วิธีการ 'คัดลอก' เมทริกซ์โดยไม่ต้องสร้างเมทริกซ์ชั่วคราวในหน่วยความจำที่ทำให้หน่วยความจำล้น
โดยการกำหนดเมทริกซ์ให้กับหน่วยความจำที่จัดสรรให้มากขึ้น matlab จะทำซ้ำในขณะที่ 'คัดลอก' และถ้าเมทริกซ์ที่จะคัดลอกมีขนาดใหญ่พอจะมีหน่วยความจำล้น นี่คือตัวอย่างรหัส: main_mat=zeros(500,500,2000); n=500; slice_matrix=zeros(500,500,n); for k=1:4 parfor i=1:n slice_matrix(:,:,i)=gather(gpuArray(rand(500,500))); end main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix; %This is where the memory will likely overflow end มีวิธีใดที่จะเพียง 'ชก' slice_matrixลงบนที่main_matไม่มีค่าใช้จ่าย? ขอบคุณล่วงหน้า. แก้ไข: โอเวอร์โฟลว์เกิดขึ้นเมื่อmain_matจัดสรรไว้ล่วงหน้า หากmain_matเริ่มต้นด้วยmain_mat=zeros(500,500,1);(ขนาดที่เล็กกว่า) การโอเวอร์โฟลว์จะไม่เกิดขึ้น แต่จะช้าลงเนื่องจากการจัดสรรไม่เสร็จสิ้นก่อนที่เมทริกซ์จะถูกกำหนดเข้าไป สิ่งนี้จะลดประสิทธิภาพลงอย่างมากเมื่อช่วงkเพิ่มขึ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.