加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何将(5,)numpy数组转换为(5,1)?

发布时间:2020-12-20 11:46:18 所属栏目:Python 来源:网络整理
导读:如何将(5,)numpy数组转换为(5,1)? 以及如何从(5,1)向后转换为(5,)? (5,)数组的目的是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式? 是仅仅保留了1D和2D数组,还是可能存在类似(2,3,)数组的存在? 更新: 我设法将(5,)转换为(5,1) a= np.
如何将(5,)numpy数组转换为(5,1)?

以及如何从(5,1)向后转换为(5,)?

(5,)数组的目的是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式?

是仅仅保留了1D和2D数组,还是可能存在类似(2,3,)数组的存在?

更新:

我设法将(5,)转换为(5,1)

a= np.reshape(a,(a.shape[0],1))

但建议的变体看起来更简单:

a = a[:,None] or a = a[:,np.newaxis]

可以使用从(5,1)到(5,)np.ravel的转换

a= np.ravel(a)

解决方法

具有形状(5,)的numpy阵列是1维阵列,而具有形状(5,1)的numpy阵列是2维阵列.差异很微妙,但可以以一种主要方式改变一些计算.人们必须特别小心,因为这些变化可能会使所有维度变平,例如np.mean或np.sum.

除了@ m-massias的答案之外,请考虑以下示例:

17:00:25 [2]: import numpy as np
17:00:31 [3]: a = np.array([1,2])
17:00:34 [4]: b = np.array([[1,2],[3,4]])
17:00:45 [6]: b * a
      Out[6]: 
array([[1,4],8]])
17:00:50 [7]: b * a[:,None] # Different result!
      Out[7]: 
array([[1,[6,8]])

a具有形状(2,),并且在第二维度上为broadcast.所以你得到的结果是每一行(第一个维度)乘以向量:

17:02:44 [10]: b * np.array([[1,[1,2]])
      Out[10]: 
array([[1,8]])

另一方面,[:,None]具有形状(2,1),因此已知矢量的方向是列.因此,您得到的结果来自以下操作(其中每列乘以a):

17:03:39 [11]: b * np.array([[1,1],[2,2]])
      Out[11]: 
array([[1,8]])

我希望能够说明两个阵列的行为方式有何不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读