a.transpose().ravel()[0]=x 不能改变numpy中原始数组的值?

环境:Python 3.6.0 |Anaconda 自定义(64 位),numpy 版本:1.11.3

示例:


In[1]: import numpy as np

In[2]: a = np.array([[1,2,3], [4,5,6]])

In[3]: a

Out[4]: 

array([[1, 2, 3],

       [4, 5, 6]])

In[5]: a.transpose()[0] = -1

In[6]: a

Out[6]: 

array([[-1,  2,  3],

       [-1,  5,  6]])

In[7]: a.ravel()[0] = -2 

In[8]: a

Out[8]: 

array([[-2,  2,  3],

       [-1,  5,  6]])

In[9]: a.transpose().ravel()[0] = -3

In[10]: a

Out[10]: 

array([[-2,  2,  3],

       [-1,  5,  6]])

我知道transpose()并ravel()返回数组的视图,因此我们可以更改其原始数组的值。但是,当我们使用时transpose().ravel(),我们不能改变它吗?为什么?


达令说
浏览 207回答 2
2回答

吃鸡游戏

In [382]: a = np.array([[1,2,3], [4,5,6]])In [383]: aOut[383]: array([[1, 2, 3],       [4, 5, 6]])In [384]: a.ravel()Out[384]: array([1, 2, 3, 4, 5, 6])ravel 给出数组的一维视图 - 并按照它们在数据缓冲区中出现的顺序显示值。In [385]: a.TOut[385]: array([[1, 4],       [2, 5],       [3, 6]])In [386]: a.T.ravel()Out[386]: array([1, 4, 2, 5, 3, 6])ravel 转置以不同顺序显示元素 - 除非我们将顺序指定为“F”(或“K”)。In [387]: a.T.ravel(order='F')Out[387]: array([1, 2, 3, 4, 5, 6])ravel(和其他操作)使 a viewif 数组可以使用原始数据,仅更改shape和strides。如果它不能,它必须制作一个副本。由于转置元素顺序发生了这种变化,因此使用 以外的其他内容进行索引会[0]选择不同的值:In [397]: a.ravel()[3]Out[397]: 4               # -1 in your Out[8]In [398]: a.T.ravel()[3]Out[398]: 5当您要求更改转置的第 4 个元素时,您会发现存在一定的歧义。它可能因您遍历元素的方式而异。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python