簡體   English   中英

使用 append 函數創建二維 numpy 數組

[英]Create 2D numpy array with append function

我想在 python 中創建一個維度為 Nx2 的二維 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= []

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

最后,您可以使用matrix = np.array(matrix)將列表列表轉換為 numpy 數組

這是一個可以執行您想要的操作並使用兩個 for 循環的函數。 N為+1而M為+1的原因是因為在python中range()函數返回一個數字序列,默認從0開始,遞增1(默認),以指定的數字結束。 因此,由於我們從 1 而不是 0 開始,我們需要添加 1 以便實際范圍是正確的。 IE。 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))

為此,您確實不需要 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。 而不是做隱vertcat ,使用np.append ,或np.concatenate

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM