matlab 中的資料維數過大的時候怎麼處理及技巧

2021-06-16 14:49:09 字數 1108 閱讀 8843

在matlab中, 當資料比較大時,運算起來就困難了,有時候還會out of memory(例如4000*4000的矩陣,要算矩陣乘法都比較吃力)。此文會記錄我學到的一些解決辦法:

1. 將資料的儲存型別從double轉換成single

在matlab中double資料型別佔8個位元組,single型別佔4個位元組。把資料型別從double型別轉換成single型別可以節省一半的空間。

單精度浮點數single的取值範圍可以通過[-realmax('single'), -realmin('single')] u [ realmin('single'), realmax('single')]檢視,可以發現其範圍一般是足夠我們使用了。

2. 避免使用高維矩陣

當資料量很大時,使用高維矩陣無疑是雪上加霜,可以考慮使用多個低維矩陣。

例如有3個n*n的矩陣(k1,k2,k3),為了程式書寫的方便,可以把這三個矩陣儲存在乙個n*n*3的矩陣k中,那麼使用這三個矩陣時就只通過k來訪問。但是,當n比較大時,三維矩陣k就更大了,很容易造成out of memory。 所以為了避免out of memory,還是使用多個二維矩陣比較好(與其分配乙個更大的空間給k,不如分配多個小矩陣,雖然總量一樣),可是這樣取用這三個矩陣卻不方便了。下面給出我的解決方案:

n = 5000;

k1 = rand(n,n);

k2 = rand(n,n);

k3 = rand(n,n);

a = ['k1'; 'k2'; 'k3'];     % 將這三個矩陣的名字存成字串矩陣

b1=eval(a(1,:));          % 通過eval()函式來取用k1

b2=eval(a(2,:));          % 取用k2

b3=eval(a(3,:));          % 取用k3

這裡用到的eval函式的功能強大,可以將字串的內容當做matlab命令來執行(execute string containing matlab expression)

3. 及時清理不用變數,特別是大資料矩陣。及時清理可以騰出空間。同時,在生成矩陣的時候最好一次性申請足夠的空間,不要在程式執行的時候變化矩陣大小。

4. 如有可能,盡量採用矩陣元素之間的運算,而不是直接的矩陣乘法

Mysql連線數過大導致連線超時的問題

mysql連線數過大導致連線超時的問題,春節訪問量激增,負載壓力很大,程式處理較慢,然後就調整專案中的執行緒池和資料庫連線數。可是還是沒有太好的提高,追根溯源,發現資料庫連線受到限制。雖然是做了讀寫分離,但是還是沒抗住高峰。所以會有報錯 mysql error 1040 too many conne...

matlab中維數的理解

a 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 就上面這樣乙個矩陣而言,它有3行5列 第一維 行維,即行向,也即垂直方向,維數為3,就矩陣a而言 第二維 列維,即列向,也即水平方向,維數為5 第三維 頁,類似課本的一頁一頁,每一頁是個平面,可以放乙個類似a的二維矩陣 第四維 沒有其他...

解決Tomcat伺服器訪問鏈結數過大的問題

解決tomcat伺服器訪問鏈結數過大的問題,tomcat作為常用的web服務容器,它的優化非常重要。1 增加tomcat訪問的執行緒數,這裡用的是apache tomcat 8.0.24版本 修改server.xml protocol設定為 org.apache.coyote.http11.http...