在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...