栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

深入理解numpy库中的order参数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深入理解numpy库中的order参数

先引入一个代码实例:

import numpy as np
x1 = np.array(
    [[[ 1 , 0],
    [ 3 , 2],
    [ 5 , 4]],

    [[ 7 , 6],
    [ 9 , 8],
    [11, 10]],

    [[12 ,13],
    [14 ,15],
    [16 ,17]]]).reshape(3,2,3,order='C')
x = np.array(
    [[[ 1 , 0],
    [ 3 , 2],
    [ 5 , 4]],

    [[ 7 , 6],
    [ 9 , 8],
    [11, 10]],

    [[12 ,13],
    [14 ,15],
    [16 ,17]]]).reshape(3,2,3).swapaxes(1,2)
y=np.ravel(x, order='C') 
n=np.ravel(x, order='F')
z=np.ravel(x, order='K')  
m=np.ravel(x, order='A')
z1=np.ravel(x1,order='K')

print('reshape:n',x1)
print('swapaxe:n',x)
print('order=C:',y)
print('order=F:',n)
print('order=K:',z)
print('order=A:',m)
print(z1)

#################################################
output:
reshape:
 [[[ 1  0  3]
  [ 2  5  4]]

 [[ 7  6  9]
  [ 8 11 10]]

 [[12 13 14]
  [15 16 17]]]
swapaxe:
 [[[ 1  2]
  [ 0  5]
  [ 3  4]]

 [[ 7  8]
  [ 6 11]
  [ 9 10]]

 [[12 15]
  [13 16]
  [14 17]]]
order=C: [ 1  2  0  5  3  4  7  8  6 11  9 10 12 15 13 16 14 17]
order=F: [ 1  7 12  0  6 13  3  9 14  2  8 15  5 11 16  4 10 17]
order=K: [ 1  0  3  2  5  4  7  6  9  8 11 10 12 13 14 15 16 17]
order=A: [ 1  2  0  5  3  4  7  8  6 11  9 10 12 15 13 16 14 17]
[ 1  0  3  2  5  4  7  6  9  8 11 10 12 13 14 15 16 17]

从这个例子去理解order的作用:
首先明确一个概念:多维数组的indexing和内存布局是两回事
即一个数组可以由多种索引方式去读取(按行读取 or 按列读取),但该数组在内存布局中只有一种存储方式(按行存储 or 按列存储)
明确了这个概念以后,还需要知道这里的swapaxes()就只是改变了数组的视图(view),其内存布局并没有改变,x的内存布局是由reshape中的order确定的默认为’C’,即按行存储(这里reshape工作流程是使用按行索引顺序读取前面数组的元素,并使用此索引顺序将这些元素放入重构的数组中(再按行存储)。)
所以x的元素实际在内存布局中的顺序为 1,0,3,2,5,4…
ravel中的order就是改变索引的方式即改变读取的方式
‘C’:按行去读取x数组
‘F’:按列去读取x数组
‘K’:按内存布局中的顺序读取
‘A’:根据reshape时使用的顺序读取即’C’序读取

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号