鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ matplotlib畫圖越來越慢?

matplotlib畫圖越來越慢?

import matplotlib.pyplot as plt
%matplotlib inline
for i in range(100000):
    print('\r %d' %i, end = '')
    for j in range(100):
        plt.scatter(mx[i], WX_b[i][j])
     

循環(huán)越多每輪越慢,外層循環(huán)幾百次就慢的不行了,是怎么回事?如何改進(jìn)?

回答
編輯回答
陌上花

盡少調(diào)用 plt.scatter 方法便可大幅提升性能.

詳解
假設(shè) WX_b 為 M N 矩陣, mx 為 M 1 矩陣, 下面代碼

for i in range(WX_b.shape[0]):
    for j in range(WX_b.shape[1]):
        plt.scatter(mx[i], WX_b[i][j])

可以優(yōu)化成

plt.scatter(mx.repeat(WX_b.shape[1], axis=1), WX_b)

jupyter 示例代碼

%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np

WX_b = np.random.randn(30, 5)
mx = np.random.randn(WX_b.shape[0], 1)

def func1():
    for i in range(WX_b.shape[0]):
        for j in range(WX_b.shape[1]):
            plt.scatter(mx[i], WX_b[i][j])
            
def func2():
    plt.scatter(mx.repeat(WX_b.shape[1], axis=1), WX_b)
    
%time func1()
%time func2()

參考結(jié)果: func2 運(yùn)行時(shí)間大約是 func1 的 5%.

2017年3月26日 10:16