transpose和ravel都提供了原始数组的视图。但结合在一起,我得到了一个新的阵列
假设我创建一个Numpy数组,a = np.arange(10).reshape(2,5)
In [13]: a = np.arange(10).reshape(2,5)
In [14]: a
Out[14]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
我把它转过来:
In [15]: b = a.T
In [16]: b
Out[16]:
array([[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]])
我可以检查b是a的视图,目前还可以。然后我做b.ravel()
In [17]: c = b.ravel()
In [18]: c
Out[18]: array([0, 5, 1, 6, 2, 7, 3, 8, 4, 9])
现在python告诉我c不再是b或a的视图。这可以通过np.may_share_memory(b, c)
或通过编辑b中的元素来检查:
In [19]: np.may_share_memory(b, c)
Out[19]: False
In [20]: b[1,0] = 100
In [21]: print(b)
...: print(a)
...: print(c)
[[ 0 5]
[100 6]
[ 2 7]
[ 3 8]
[ 4 9]]
[[ 0 100 2 3 4]
[ 5 6 7 8 9]]
[0 5 1 6 2 7 3 8 4 9]
那么,这里发生了什么?虽然每一步(转置、拉威尔)都是原始数组的视图,但结合在一起,我得到了一个新数组
目前没有回答
相关问题 更多 >
编程相关推荐