如何将numpy 1D阵列转换为连续的2D列阵列而不复制数据

时间:2014-10-23 08:00:56

标签: arrays numpy

是否可以转换一维数组

a = np.array([1,2,3])

到二维数组,相当于

b = np.array([[1],[2],[3]])
  1. 没有创建数组的副本,也
  2. b是连续的吗?

2 个答案:

答案 0 :(得分:2)

您可以使用np.newaxisT transpose方法执行此操作。

import numpy as np

a = np.array([1,2,3])

a = a[np.newaxis].T

print(a)
# [[1]
#  [2]
#  [3]]

答案 1 :(得分:1)

重塑数组不会复制数据(如果可能*)并保留C连续性(通常):

>>> a = np.array([1,2,3])
>>> b = a.reshape(3, 1)
>>> b
array([[1],
       [2],
       [3]])

>>> b.flags

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

*编辑:重塑通常会创建一个数组视图,但这不是总是可能(docs)。有一些方法可以检查数据是否未被复制,ab共享相同的基础数据。例如,请参阅herehere

在上述情况下,尝试几项测试表明reshape创建了a的视图(未复制数据):

>>> a.data == b.data
True

>>> np.may_share_memory(a, b) # function from linked answer above
True