Python 为什么np.concatenate更改维度
在下面的程序中,我试图理解np.concatenate命令是如何工作的。在通过for循环访问数组的每一行之后,当我沿着行轴连接时,我期望一个具有Python 为什么np.concatenate更改维度,python,numpy,Python,Numpy,在下面的程序中,我试图理解np.concatenate命令是如何工作的。在通过for循环访问数组的每一行之后,当我沿着行轴连接时,我期望一个具有(5,5)形状的二维数组,但它会发生变化 我希望在连接后具有相同的维度(5,5)。我该怎么做 我试图对二维数组重复上述方法,将它们存储在一个列表中[(2,5)、(2,5)、(2,5)]。最后,当我连接时,它给了我预期的(6,5)形状,但在下面的情况下,它是不同的 a = np.arange(25).reshape(5,5) ind =[0,1,2,3
(5,5)
形状的二维数组,但它会发生变化
我希望在连接后具有相同的维度(5,5)
。我该怎么做
我试图对二维数组重复上述方法,将它们存储在一个列表中[(2,5)、(2,5)、(2,5)]
。最后,当我连接时,它给了我预期的(6,5)
形状,但在下面的情况下,它是不同的
a = np.arange(25).reshape(5,5)
ind =[0,1,2,3,4]
list=[]
for i in ind:
list.append(a[i])
new= np.concatenate(list, axis=0)
print(list)
print(len(list))
print(new)
print(new.shape)
这将为新建提供以下结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
对于new.shape
:
(25,)
在这之前,您确实不应该在这里使用串联
设置
你的问题是:
为什么np.concatenate
正在更改维度
它并没有改变维度,而是根据您提供的输入来做它应该做的事情
沿现有轴连接阵列序列
当您将列表传递给串联
时,不要将其视为传递(5,5)
列表,而应将其视为传递5(5,)
形状数组,这些数组沿轴0
连接,这将直观地生成(25,)
形状输出
现在,这个行为也让我们了解了如何解决这个问题。如果传递5(5,)
形状数组生成(25,)
形状输出,我们只需要传递(1,5)
形状数组来生成(5,5)
形状输出。我们可以通过简单地向L
的每个元素添加一个维度来实现这一点:
np.concatenate([[i] for i in L])
然而,更好的方法是简单地使用stack
,vstack
,等等
>>> np.stack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> np.vstack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
在这之前,您确实不应该在这里使用串联
设置
你的问题是:
为什么np.concatenate
正在更改维度
它并没有改变维度,而是根据您提供的输入来做它应该做的事情
沿现有轴连接阵列序列
当您将列表传递给串联
时,不要将其视为传递(5,5)
列表,而应将其视为传递5(5,)
形状数组,这些数组沿轴0
连接,这将直观地生成(25,)
形状输出
现在,这个行为也让我们了解了如何解决这个问题。如果传递5(5,)
形状数组生成(25,)
形状输出,我们只需要传递(1,5)
形状数组来生成(5,5)
形状输出。我们可以通过简单地向L
的每个元素添加一个维度来实现这一点:
np.concatenate([[i] for i in L])
然而,更好的方法是简单地使用stack
,vstack
,等等
>>> np.stack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> np.vstack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
首先,不要使用list
作为名称,因为它是内置的。其次,看起来您只需要np.array(lst)
,它将提供一个(5,5)
数组。我不知道你为什么要使用连接np.array(lst)
给出与a=np.arange(25)相同的输出。重塑(5,5)
您应该将输出添加到问题中。把它放在一个代码块中以保留格式。但是在浓缩后,当我打印新的时,它会给我一个(25,)的形状,我希望它是(5,5)。我希望在concatation之后,第二行出现在第一行下面。np.concatenate
类似于python列表的+
(但可以在输入数组的任何轴上工作),您需要np.array(list)
或np.vstack(list)
。所需的输出与首先具有(5,5)形状的输出相同,不要使用list
作为名称,因为它是内置的。其次,看起来您只需要np.array(lst)
,它将提供一个(5,5)
数组。我不知道你为什么要使用连接np.array(lst)
给出与a=np.arange(25)相同的输出。重塑(5,5)
您应该将输出添加到问题中。把它放在一个代码块中以保留格式。但是在浓缩后,当我打印新的时,它会给我一个(25,)的形状,我希望它是(5,5)。我希望在concatation之后,第二行出现在第一行下面。np.concatenate
类似于python列表的+
(但可以在输入数组的任何轴上工作),您需要np.array(list)
或np.vstack(list)
。所需的输出与(5,5)的形状相同