Python 使用append函数创建二维numpy数组

Python 使用append函数创建二维numpy数组,python,numpy,Python,Numpy,我想用python创建一个尺寸为Nx2的2D numpy数组。我想通过使用2for循环来创建它。我可以用下面的代码在Matlab中轻松构建这个数组 matrix = []; for i = 1:3 for j = 1:4 temp = [i, j]; matrix = [matrix; temp]; end end 我已经试过很多次了,但都失败了。通常,我得到的错误与运行for循环时不匹配的数组大小有关 代码的输出是 matrix = 1

我想用python创建一个尺寸为Nx2的2D numpy数组。我想通过使用2
for
循环来创建它。我可以用下面的代码在Matlab中轻松构建这个数组

matrix = [];

for i = 1:3
    for j = 1:4
        temp = [i, j];
        matrix = [matrix; temp];
    end
end
我已经试过很多次了,但都失败了。通常,我得到的错误与运行
for
循环时不匹配的数组大小有关

代码的输出是

matrix =

 1     1
 1     2
 1     3
 1     4
 2     1
 2     2
 2     3
 2     4
 3     1
 3     2
 3     3
 3     4
matrix=[]
对于范围(1,4)内的i:
对于范围(1,5)内的j:
温度=[i,j]
矩阵附加(临时)
最后,您可以使用将列表列表转换为numpy数组
matrix=np.array(matrix)

要做到这一点,您实际上不需要在MATLAB或numpy中使用循环。在这两种语言中,显式循环往往比矢量化代码时运行的隐藏式循环慢。在循环中追加的另一个问题是,每个操作都会重新分配整个数组以添加新元素。您希望尽可能避免追加和预分配

两个软件包都有
meshgrid
功能。在numpy中,您可以执行以下操作:

ii = np.arange(3) + 1
jj = np.arange(4) + 1
j, i = np.meshgrid(jj, ii)

matrix = np.stack((i.ravel(), j.ravel()), axis=1)
在MATLAB中,它将非常类似:

ii = 1:3;
jj = 1:4;
[i, j] = meshgrid(ii, jj);

matrix = [i(:) j(:)];
如果您确实需要在一个不断重新分配的循环中执行此操作,那么MATLAB循环很容易转换为numpy。使用
np.append
np.concatenate
代替隐式
vertcat

matrix = np.array((0, 2));

for i in range(1, 4)
    for j in range(1, 5)
        temp = [[i, j]]
        matrix = np.append(matrix, temp, axis=0)

这里有一个函数,它执行您想要的操作,并使用两个for循环。N为+1,M为+1的原因是,在python中,range()函数返回一个数字序列,默认情况下从0开始,递增1(默认情况下),并以指定的数字结束。因此,由于我们从1开始,而不是从0开始,我们需要添加1,以便实际范围是正确的。也就是说,0,4是4的范围,但1,4实际上只是3的范围。希望有帮助-布雷克

import numpy as np


def Nx2(N, M):
    matrix=[]
    n = N+ 1
    m= M + 1
    for i in range(1,n):
        for j in range(1,m):
            temp=[i,j]
            matrix.append(temp)
    final_matrix = np.array(matrix)
    return final_matrix
print(Nx2(3, 4))

np.zero((100100))
创建一个填充有零的二维数组。如果你在问题中添加预期输出,这将很清楚。你是对的,我将添加预期输出。你提到的可能是第一步。谢谢你的记忆在MATLAB中一切都是2d的。
[]
为0x0<代码>[[];[1,2]]将其与1x2连接,根据需要展开形状。在
numpy
中,数组可以是0d、1d等。
np.concatenate
对匹配维度很挑剔
np.append
连接的一个糟糕的前端设计。我知道使用“for”循环效率很低。我知道我可能会养成一个坏习惯,但我管理的数据维度并不大,所以这并不重要。你写的最后一段代码就是我一直想做的。到目前为止,我得到了以下错误。ValueError:所有输入数组的维数必须相同,但索引0处的数组有1个维度,而索引1处的数组有2个维度@ArmanoJaver。您应该选择最适合您的任务的答案,并对您认为有帮助的内容进行投票。您在函数外设置了一个全局矩阵(坏),然后返回它(好)。此外,这与SurajSubramanian在一刻钟前发布的答案没有太大区别。在这种情况下,是否最好将矩阵设置为=[]函数的内部?(总是学习)绝对。不这样做完全是错误的。试着运行你的函数两次。有这样的时刻很好。顺便说一下,别忘了修正你的缩进。