python中转置函数 python转置dataframe( 三 )


比如说我要将一个二维数组转换为三维数组 。
reshape 方法可以传入整数或者元组形式的参数 。
传入的参数和 shape 属性返回的元组的含义是一样的 。
例如,x2.reshape(1,2,3) 是将二维数组转换成三维数组,参数个数代表要转换的维度,参数数字从左到右分别表示0轴、1轴、2轴的元素数量 。
resize 方法和 reshape 方法使用形式一样 , 区别是 resize 方法改变了原始数组形状 。
numpy一维数组的索引和切片操作类似python列表,这里不多讲 。
比如说取一维数组前三个元素 。
重点是对多维数组的索引和切片 。
多维数组有多个轴,那么就需要对每个轴进行索引 。
例如,三维数组形状为(x,y,z),分别代表:0轴有x个元素、1轴有y个元素,2轴有z个元素 。
对0、1、2轴进行索引,如果取o轴第2个元素、1轴第0个元素、2轴第3个元素,那么索引形式就为[2,0,3] 。
切片也是同样道理 。
如果取o轴前2个元素、1轴前1个元素、2轴后2个元素,那么切片形式就为[:2,:1,-2:] 。
说到迭代,大家很容易想到直接对数组直接使用 for 循环操作,对于一维数组来说,当然是可以的 。
但对于多维数组,迭代是相对于0轴完成的,就是多维数组最外层的那一维 。
你没有办法直接遍历数组里每一个元素,嵌套循环又太低效 。
这个时候就需要用到 flat 方法,它可以将多维数组平铺为一维的迭代器 。
数组(ndarray)对象提供了ravel方法,用来将多维数组展开为一维数组 。
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式,对多个数组的算术运算通常在相应的元素上进行 。
较小的数组在较大的数组上“广播” , 以便它们具有兼容的形状 。
比如说一个一维数组乘以一个数字 , 相当于一维数组里每个元素都乘以这个数 。
如果相同维度的数组进行运算,其shape相同,那么广播就是两个数组相同位数的元素进行运算 。
如果两个数组维度不同,进行运算,这里就触发了广播的两个规则 。
这两个规则保证了不同维度数组进行运算时,其维度自动调整成一致 。
numpy提供了 transpose 函数用以对数组进行维度的调换,也就是转置操作 。
转置后返回一个新数组 。
当然,可以用更简单的方法 。
数组对象提供了 T 方法,用于转置,同样会返回一个新数组 。
numpy的 concatenate函数用于沿指定轴连接相同形状的两个或多个数组 。
numpy的 unique函数用于去除数组中的重复元素,返回一个新数组 。
unique 函数还能返回重复元素的索引、计数等信息,可去查文档自定义参数 。
numpy文档
菜鸟教程
python中transpose是什么意思我先来一个举例:
arr = np.arange(16).reshape((2, 2, 4))
arr的array是这样的
array([[[ 0,1,2,3],
[ 4,5,6,7]],
[[ 8,9, 10, 11],
[12, 13, 14, 15]]])
我们对arr进行transpose转置 , arr2 = arr.transpose((1,0,2)),结果是这样:
array([[[ 0,1,2,3],
[ 8,9, 10, 11]],
[[ 4,5,6,7],
[12, 13, 14, 15]]])
这是怎么来的呢 。
arr.transpose((1,0,2))的1,0,2三个数分别代表shape()的三个数的顺序,初始的shape是(2,2,4),也就是2维的2 x 4矩阵,索引分别是shape的[0],[1],[2],arr.transpose((1,0,2))之后,我们的索引就变成了shape[1][0][2],对应shape值是shape(2,2,4) , 所以矩阵形状不变 。
与此同时,我们矩阵的索引也发生了类似变化,如arr中的4,索引是arr[0,1,0],arr中的5是arr[0,1,1],变成arr2后,4的位置应该是在[1,0,0] , 5的位置变成[1,0,1] , 同理8的索引从[1,0,0]变成[0,1,0] 。

推荐阅读