This question already has answers here:
Python Numpy Data Types Performance
(2个答案)
5个月前关闭。
我试着运行一个代码片段,看起来像,
为了提高速度,我使用了
将它们改为
(2个答案)
5个月前关闭。
我试着运行一个代码片段,看起来像,
import numpy as np
import time
def estimate_mutual_info(X, neurons, bins = 5):
xy = np.histogram2d(X, neurons, bins)[0]
x = np.histogram(X, bins)[0]
y = np.histogram(neurons, bins)[0]
ent_x = -1 * np.sum( x / np.sum(x) * np.log( x / np.sum(x)))
ent_y = -1 * np.sum( y / np.sum(y) * np.log( y / np.sum(y)))
ent_xy = -1 * np.sum( xy / np.sum(xy) * np.log( xy / np.sum(xy)))
return (ent_x + ent_y - ent_xy)
tic = time.time()
X = np.random.rand(12000, 1200)
Y = np.random.rand(12000, 10)
for j in Y.T:
mi = 0
for i in range(X.shape[1]):
mi += estimate_mutual_info(X.T[i], j, bins = 2)
print(mi)
toc = time.time()
print(str(toc - tic)+" seconds")
为了提高速度,我使用了
float16
,希望看到一些改进,但是float16
比float32
和float64
慢得多。X = np.random.rand(12000, 1200).astype('float16')
Y = np.random.rand(12000, 10).astype('float16')
将它们改为
float16
将导致执行时间84.57 seconds
,而float64
和float32
分别执行36.27 seconds
和33.25 seconds
。我不确定,是什么原因导致flaot16
的性能不佳。我的处理器是64 bit
,使用python3.7
和numpy-1.16.2
。我不认为64位处理器对所有16位、32位和64位处理器都漠不关心。任何更正和洞察都是非常值得赞赏的。 最佳答案
最有可能的解释是你的处理器本身不支持FP16算法,所以它都是在软件中完成的,当然,这要慢得多。
一般来说,消费型英特尔处理器不支持FP16操作。
关于python - 在numpy中,Float16比Float32和Float64慢得多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56697332/
10-12 14:34