Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么np.concatenate更改维度_Python_Numpy - Fatal编程技术网

Python 为什么np.concatenate更改维度

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

在下面的程序中,我试图理解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,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)的形状相同