numpy:修改转置数组不能按预期工作

时间:2013-10-23 19:26:36

标签: python numpy transpose

我从一个更复杂的程序中得到了这段代码:

import numpy as np

ph=np.arange(6).reshape([2,3])
T=np.transpose(ph)
print 'T:\n',T
print 'ph:\n',ph              # printing arrays before for cycle
for i in range(0,len(T)):
  T[i]=2*T[i]
print 'ph:\n', ph             # printing arrays after for cycle
print 'T:\n',T

我希望输出T和

ph:
[[0 1 2]
 [3 4 5]]

相反,我有

ph:
[[ 0  2  4]
 [ 6  8 10]]
T:
[[ 0  6]
 [ 2  8]
 [ 4 10]]

因此,当我在每个T的内部乘以* 2时,我对ph进行相同的操作。为什么呢?

2 个答案:

答案 0 :(得分:3)

您可以在docstring of np.transpose中找到原因:

 Returns
 ------- p : ndarray
     `a` with its axes permuted.  A view is returned whenever
     possible.

解决方案是使用T = ph.T.copy()如果您不想要视图,而是使用副本。

答案 1 :(得分:1)

transpose返回原始数组的视图。要解决您的问题,请复制,例如:

T=np.transpose(ph).copy()