1

我有一个更复杂的程序,这段代码:

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]]

因此,当我在 for cicle 中将 T 的每一行乘以 *2 时,我对 ph 做同样的事情。为什么?

4

2 回答 2

3

您可以在以下文档字符串中np.transpose找到原因:

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

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

于 2013-10-23T19:30:12.070 回答
1

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

T=np.transpose(ph).copy()
于 2013-10-23T19:31:21.433 回答