【问题标题】:Reduce Dimensons when converting list to array将列表转换为数组时减少维度
【发布时间】:2015-05-16 22:41:14
【问题描述】:

我想在将数组转换为列表后减小其维度

a = np.array([[1,2],[3,4]])
print a.shape
b = np.array([[1],[3,4]])
print b.shape

输出:

(2, 2)
(2,)

我希望 a 具有与 b 相同的形状,即 (2,)

【问题讨论】:

  • 您希望a 转换后的样子?如果你希望它是[[1,2],[3,4]],它必须是二维的。 list(a) 会将您的数组转换为 [array([1, 2]), array([3, 4])]。这就是你想要的吗?
  • 转换后我希望它看起来像 [[1,2],[3,4]]
  • 我希望它看起来像那样,但具有 b 的结构。第二个维度应该是未定义的。我希望这是有道理的。
  • 对我来说没有意义。你为什么要那个?
  • 稍后我将使用 vstack() 加入数组,如果形状不匹配 vstack() 无法正常工作

标签: python arrays numpy shape


【解决方案1】:
>>> a = np.array([[1,2],[3,4], None])[:2]
>>> a
array([[1, 2], [3, 4]], dtype=object)
>>> a.shape
(2,)

有效,但可能是错误的做法(我是个麻木的新手)。

【讨论】:

  • 不过,我将 None 放在第一个单元格中,让 numpy 有机会缩短深度搜索。
【解决方案2】:

你知道b是什么吗?

b = np.array([[1],[3,4]])
print(repr(b))

array([[1], [3, 4]], dtype=object)

b 是一个包含 2 个元素的一维数组,每个元素都是一个列表。 np.array 这样做是因为 2 个子列表的长度不同,所以无法创建二维数组。

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

array([[1, 2],
       [3, 4]])

这里的 2 个子列表长度相同,因此可以创建一个二维数组。每个元素都是一个整数。 np.array 尝试创建输入允许的最高维数组。

创建像b 这样的另一个数组的最佳方法可能是制作一个副本,然后插入所需的列表。

a1 = b.copy()
a1[0] = [1,2]
# a1[1] = [3,4]
print(repr(a1))

array([[1, 2], [3, 4]], dtype=object)

你必须使用这种复杂的方法,因为你试图做一些“不自然”的事情。

您对使用vstack 发表评论。两者都有效:

In [570]: np.vstack((a,b))   # (3,2) array
Out[570]: 
array([[1, 2],
       [3, 4],
       [[1], [3, 4]]], dtype=object)

In [571]: np.vstack((a1,b))   # (2,2) array
Out[571]: 
array([[[1, 2], [3, 4]],
       [[1], [3, 4]]], dtype=object)

您的数组b 只不过是数组包装器中的原始列表。这真的是你需要的吗? 2d a 是一个普通的 numpy 数组。 b 是一个奇怪的结构。

【讨论】:

  • 感谢您的 cmets 真的很有帮助。的确,它主要用作列表,但它允许我在数组中添加一列空列表。这是我无法通过列表实现的
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2022-06-17
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多