首页 > 解决方案 > Python Numpy 初学者:获取形状为 ((M,N),(M,N)) 的数组

问题描述

作为代码的输入,我需要一个“ndarray”(称为 C),其形状为:((4,N),(4,N))。所以,如果 N=3,我想我可以这样构造它:

import numpy as np
A=np.array([[1, 2,3], [0.1, 0.2,0.3],[0.4,0.5,0.6],[0.7,0.8,0.9]])
B=np.array([[4,5,6], [0.4, 0.5,0.6],[0.7,0.8,0.9],[0.7,0.8,1]])

因此,如何结合A和B得到C,其形状为((4,3),(4,3))(st C[0]也应该是A,C[1]应该是B)?

我试过了:

C=np.concatenate(([A], [B]), axis=0)

,但生成的 C.shape 是 (2, 4, 3) 而不是 ((4,3),(4,3))。然后我天真地尝试重塑C:

C.reshape((4,3),(4,3)) 

但后来我收到一条错误消息。

如果问题太基本,我很抱歉,我刚刚开始使用 python。

最好的,

史蒂文

标签: pythonarraysnumpymultidimensional-arrayreshape

解决方案


为了满足您的要求,如果您了解 numpy ndarrays 的工作原理,那就更简单了。在您列出的示例中,您可以使用以下形状在 3 维中创建一个完全符合该类型的数组:

numpy.zeros((4,N,2));

这将创建一个具有您要求的形状的数组。关于 numpy 数组创建的文档页面有很多关于如何使用它的重要信息。

但是,如果要合并两个数组,有很多方法可以做到。

stacked0=numpy.stack(A,B)                # Stack the arrays along a new axis (a 3rd axis in this case)
stacked0.shape                           # outputs (2,4,3) in the example arrays.      

这创建了一个新轴并沿它合并,在这种情况下,默认替换第一个轴 (axis=0),并将剩余的轴向下移动。这仅在您需要稍后对其进行索引以及高级应用程序中的一些挑剔性能时才重要。作为初学者,最重要的是要了解要合并的轴。

stacked1=numpy.stack([A,B],axis=1)    # Replaces the second axis to stack
stacked1.shape                        # (4,2,3)
stacked2=numpy.stack([A,B],axis=2)    # Appends a third axis
stacked2.shape                        # (4,3,2)

您还可以沿现有轴连接它们。

concated0 = numpy.concatenate([A,B],axis=0) # merges them along the first axis
concated0.shape                  # (8,3)
concated1 = numpy.concatenate([A,B],axis=1)
concated1.shape                  # (4,6)

有关如何重新排列数组的更多选项,请参阅数组操作文档


推荐阅读