将列表转换为数组时减少Dimensons

时间:2015-05-16 22:41:15

标签: python arrays numpy shape

我希望在将数组转换为列表

后减小数组的尺寸
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,)

2 个答案:

答案 0 :(得分:1)

>>> a = np.array([[1,2],[3,4], None])[:2]
>>> a
array([[1, 2], [3, 4]], dtype=object)
>>> a.shape
(2,)

作品虽然可能是错误的做法(我是一个numpy newb)。

答案 1 :(得分:0)

你明白b是什么吗?

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

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

b是一个包含2个元素的1d数组,每个元素都是一个列表。 np.array这样做是因为2个子列表具有不同的长度,因此无法创建2d数组。

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是一个古怪的结构。