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
比数组包装器中的原始列表稍多。这真的是你需要的吗?2da
是一个普通的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)