numpy.swapaxes的行为

时间:2017-02-21 04:22:24

标签: python numpy

任何人都可以解释一下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),代码也可以正常运行。 (调试非常令人沮丧,因为代码适用于小样本......)

1 个答案:

答案 0 :(得分:1)

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

您将了解问题here

一些摘录:

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

智慧规则:永远不要修改你正在阅读的数据。