pythonnumpy初始化三维数组_numpy中的三维数组

正如人们常说的“顺序不重要,它只是一种约定”一样,当进入跨域接口时,这种约定就失效了,即从C排序转换到Fortran排序或其他排序方案。在这里,准确地说,数据是如何分层的,形状是如何在numpy中表示的非常重要。

默认情况下,numpy使用C排序,这意味着内存中的连续元素是存储在行中的元素。您还可以执行FORTRAN排序(“F”),这将根据列对元素进行排序,为连续元素编制索引。

Numpy的形状还有它自己的显示顺序。在numpy中,形状首先是最大的跨距,即在3d向量中,它将是最小连续维数、Z或页、第3维等。。。所以在执行时:

np.zeros((2,3,4)).shape

你会得到

(2,3,4)

实际上是(frames, rows, columns)。而做np.zeros((2,2,3,4)).shape则意味着(metaframs, frames, rows, columns)。当你想到像langauges那样用C创建多维数组时,这就更有意义了。对于C++,创建一个非连续定义的4D数组会导致^ {< CD6> }。这将强制您取消引用第一个数组,该数组包含所有其他数组(第4维),然后一直引用相同的数组(第3、第2、第1),从而产生如下语法:

double element = array4d[w][z][y][x]

在fortran中,这个索引顺序是相反的(x是第一个array4d[x][y][z][w]),大多数是连续的,而最不连续的,在matlab中,它变得很奇怪。

Matlab试图同时保留数学默认顺序(行、列),但在库内部也使用column major,而不遵循维度排序的C约定。在matlab中,您可以这样订购:

double element = array4d[y][x][z][w]

它将所有约定神化,并创建奇怪的情况,在这种情况下,您有时像按行排序,有时按列排序(例如使用矩阵创建)进行索引。

实际上,Matlab是最不直观的,而不是Numpy。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值