读有趣的书 “从Python到Numpy” 我遇到了一个 例,其描述如下:
让我们考虑一个简单的例子,我们想清除所有的值 来自具有dtype的数组
np.float32
。如何写它 最大化速度?
提供的结果让我感到惊讶,当我重新检查它们时,我得到了完全不同的行为。所以,我要求作者仔细检查,但他收到了与之前相同的结果(OS X 10)在下表中:
变种在三台不同的计算机上定时:我的(Win10, Win7的)和作者(OSX 10.13.3)。同 Python 3.6.4 和 numpy 1.14.2,每个变体的时间都是固定的 100循环,最好的3。
编辑:这个问题不是关于这样一个事实:在不同的计算机上,具有不同的特征,我得到不同的时间 - 这是显而易见的:) 问题是两个操作系统的行为有很大不同 - 这不是很明显吗? (如果是这样的话,如果有人可以仔细检查,我会很高兴)。
设置是: Z = np.ones(4*1000000, np.float32)
| Variant | Windows 10 | Ubuntu 17.10 | Windows 7 | OSX 10.13.3 |
| | computer 1 | comp 2 | comp 3 |
| --------------------------- | ------------------------- | --------- | ----------- |
| Z.view(np.float64)[...] = 0 | 758 usec | 1.03 msec | 2.72 msec | 1.01 msec |
| Z.view(np.float32)[...] = 0 | 757 usec | 1.01 msec | 2.61 msec | 1.58 msec |
| Z.view(np.float16)[...] = 0 | 760 usec | 1.01 msec | 2.62 msec | 2.85 msec |
| Z.view(np.complex)[...] = 0 | 1.06 msec | 1.02 msec | 3.26 msec | 918 usec |
| Z.view(np.int64)[...] = 0 | 758 usec | 1.03 msec | 2.69 msec | 1 msec |
| Z.view(np.int32)[...] = 0 | 757 usec | 1.01 msec | 2.62 msec | 1.46 msec |
| Z.view(np.int16)[...] = 0 | 760 usec | 1.01 msec | 2.63 msec | 2.87 msec |
| Z.view(np.int8)[...] = 0 | 758 usec | 773 usec | 2.68 msec | 614 usec |
| Z.fill(0) | 747 usec | 998 usec | 2.55 msec | N/A |
| Z[...] = 0 | 750 usec | 1 msec | 2.59 msec | N/A |
正如您在此表中所看到的那样 视窗 结果不依赖于查看的类型,而是依赖于 OS X. 这个黑客高度影响了性能。 您能否提供有关这种情况的见解?
编辑:正如我上面写的那样,三台电脑是不同的。
第一台电脑的规格:
Windows 10和Ubuntu 17.10
CPU:Intel Xenon E5-1650v4 3.60GHz
内存:128GB DDR4-2400
第二台电脑的规格:
Windows 7的
CPU:Intel Pentium P6100 2.00GHz
内存:4GB DDR3-1333
第三台电脑的规格: 我没有这个信息:)
编辑2:添加结果 第一台电脑 上 Ubuntu 17.10。