numpy 数组的 C contiguous 是什么意思?

本文探讨了Ccontiguous和Fcontiguous的概念,解释了行优先和列优先存储方式如何影响矩阵的访问速度。通过对比不同编程语言如Pascal、C、C++、Python和Fortran、MatLab的存储特性,以及numpy随机矩阵的实例,揭示了行连续矩阵求行和与列和的速度差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C contiguous 指的是数组的行存储在内存中的地址是连续的,

与之对应的是 F contiguous,指的是数组的列存储在内存中的地址是连续的,

Pascal, C,C++,Python 都是行优先存储,即内存中同行的元素存在一起;

而 Fortran,MatLab 是列优先存储,即内存中同列的元素存在一起。

这种设计有什么好处呢?

当然是为了提升访问速度!

一般从内存读取数据的时候会将数据相邻的内容一起读,方便缓存加速。

如果一个矩阵是行连续的,那它的转置就是列连续的,下面这个例子说明了这一点:

>>> a = np.random.random((5,5))

>>> a.flags

  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

>>> a.T.flags

  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

可见,numpy 生成的随机矩阵默认是行连续的。

我们对一个行连续的矩阵求行和列和,你猜结果谁更快?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值