Python 将列表转换为数组时减少维度

Python 将列表转换为数组时减少维度,python,arrays,numpy,shape,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,) 工作,但可能是错误的方式(我是个新手)。你明白什么是b b = np.array([[1],[3,4]]) print(repr(b)) array([[1], [3, 4]], dtype=object) b是一个1d数组

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

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,)


工作,但可能是错误的方式(我是个新手)。

你明白什么是
b

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

array([[1], [3, 4]], dtype=object)
b
是一个1d数组,包含2个元素,每个元素都是一个列表
np.array
这样做是因为两个子列表的长度不同,因此无法创建二维数组

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

array([[1, 2],
       [3, 4]])
在这里,两个子列表具有相同的长度,因此可以创建二维数组。每个元素都是一个整数
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
是一种奇怪的结构。

您希望
a
在转换后看起来像什么?如果希望它是
[[1,2],[3,4]]
,它必须是二维的<代码>列表(a)会将您的数组转换为
[array([1,2])、array([3,4])]
。这就是你想要的吗?在转换之后,我希望它看起来像[[1,2],[3,4]]我希望它看起来像那样,但是有b的结构。第二个维度应该是未定义的。我希望这是有道理的。对我来说没有道理。为什么要这样做?我稍后会使用vstack()来加入数组,如果形状与vstack()不匹配,则vstack()不起作用。您的注释非常有用。是的,它主要用作列表,但它允许我在数组中添加一列空列表。虽然我无法用列表实现,但我会将“无”放在第一个单元格中,让numpy有机会缩短深度搜索。
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)