python维度长度_python – numpy:为什么(x,1)和(x,)维度之间存在差异

ndarray的数据存储为1d缓冲区 – 只是一块内存.数组的多维特性由shape和strides属性以及使用它们的代码生成.

numpy开发人员选择允许任意数量的维度,因此形状和步幅表示为任何长度的元组,包括0和1.

相比之下,MATLAB是围绕为矩阵运算开发的FORTRAN程序构建的.在早期,MATLAB中的所有东西都是2d矩阵.在2000年左右(v3.5),它被推广到允许超过2d,但从不少. numpy np.matrix仍然遵循旧的2d MATLAB约束.

如果您来自MATLAB世界,您习惯于这两个维度,以及行向量和列向量之间的区别.但是在不受MATLAB影响的数学和物理学中,矢量是一维数组. Python列表本质上是1d,c数组也是如此.要获得2d,您必须拥有列表或数组指针数组,并使用x [1] [2]样式的索引.

看看这个数组及其变体的形状和步幅:

In [48]: x=np.arange(10)

In [49]: x.shape

Out[49]: (10,)

In [50]: x.strides

Out[50]: (4,)

In [51]: x1=x.reshape(10,1)

In [52]: x1.shape

Out[52]: (10, 1)

In [53]: x1.strides

Out[53]: (4, 4)

In [54]: x2=np.concatenate((x1,x1),axis=1)

In [55]: x2.shape

Out[55]: (10, 2)

In [56]: x2.strides

Out[56]: (8, 4)

MATLAB最后增加了新的尺寸.它将其值排序为order =’F’数组,并且可以很容易地将(n,1)矩阵更改为(n,1,1,1). numpy是默认顺序=’C’,并且可以在开始时轻松扩展数组维度.在利用广播时,了解这一点至关重要.

因此x1 x是a(10,1)(10,)=> (10,1)(1,10)=> (10,10)

由于广播,(n,)数组更像是(1,n),而不是(n,1). 1d数组更像是行矩阵而不是第1列.

In [64]: np.matrix(x)

Out[64]: matrix([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

In [65]: _.shape

Out[65]: (1, 10)

连接点是需要匹配的维度.它不使用广播来调整尺寸.有一堆堆栈函数可以简化这种约束,但是它们通过在使用连接之前调整尺寸来实现.看看他们的代码(可读的Python).

因此,熟练的numpy用户需要熟悉该通用形状元组,包括empty()(0d数组),(n,)1d和up.对于更高级的东西,了解步幅也有帮助(例如在转置的步幅和形状上查看).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值