我需要僅使用列表理解創建一個二維 numpy 數組,但它必須遵循以下格式:[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]]到目前為止,我所能弄清楚的是:two_d_array = np.array([[x+1 for x in range(3)] for y in range(5)])給予:array([[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]])只是不太確定如何更改增量。任何幫助將不勝感激,謝謝!編輯:示例中不小心遺漏了 [3,4,5]?,F在包括在內。
3 回答

www說
TA貢獻1775條經驗 獲得超8個贊
這是一個可以完成這項工作的快速單行文字:
np.array([np.arange(i, i+3) for i in range(1, 6)])
其中3
是列數或每個數組中的元素數,6
是要執行的迭代次數 - 或者在本例中是要創建的數組數;這就是輸出中有 5 個數組的原因。
輸出:
array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]])

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
更改代碼,類似這樣的事情可以工作:
two_d_array = np.array([[(y*3)+x+1 for x in range(3)] for y in range(5)])
>>> [[1,2,3],[4,5,6],...]
two_d_array = np.array([[y+x+1 for x in range(3)] for y in range(5)])
>>> [[1,2,3],[2,3,4],...]

慕少森
TA貢獻2019條經驗 獲得超9個贊
你已經得到了一些很好的理解答案,所以這里有一些 numpy 解決方案。
簡單加法:
np.arange(1, 6)[:, None] + np.arange(3)
瘋狂的跨步技巧:
base = np.arange(1, 8)
np.lib.stride_tricks.as_strided(base, shape=(5, 3), strides=base.strides * 2).copy()
重塑累積和:
base = np.ones(15)
base[3::3] = -1
np.cumsum(base).reshape(5, 3)
添加回答
舉報
0/150
提交
取消