我从一个更复杂的程序中得到了这段代码:
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进行相同的操作。为什么呢?
答案 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()