Behavior of numpy.swapaxes



任何人都可以解释numpy.swapaxes的以下行为:

import numpy as np
from copy import deepcopy
n = 10 # Works fine, but doesn't if set n = 100
x = rand.uniform(size=(n, n, n))
x0 = deepcopy(x)
x += np.swapaxes(x, 0, 1)  # Works fine if do x = x + np.swapaxes(x, 0, 1) instead...
temp = x0 + np.swapaxes(x0, 0, 1)
print np.linalg.norm(x - temp)

n = 10时,打印错误为零,而在n = 1000时则不为零。为什么这样?如果我们执行x = x + np.swapaxes(x, 0, 1)而不是x += np.swapaxes(x, 0, 1),则该代码也可以正常工作。(调试非常令人沮丧,因为代码在小样本上工作...)

问题出现了,因为您正在修改正在阅读的数据...

您将在这里理解问题。

一些提取物:

  • 这是一个设计问题,不是真正的错误。
  • Numpy的一般理念是提供尽可能多的安全性速度妥协。
  • [纠正] ...将导致不可预测的放缓并增加在已经定义和正常工作的情况下使用内存。

智慧规则:切勿修改您正在阅读的数据。

最新更新