使用列表理解创建二维 numpy 数组

我需要仅使用列表理解创建一个二维 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]。现在包括在内。


HUH函数
浏览 98回答 3
3回答

www说

这是一个可以完成这项工作的快速单行文字: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]])

守候你守候我

更改代码,类似这样的事情可以工作: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],...]

慕少森

你已经得到了一些很好的理解答案,所以这里有一些 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] = -1np.cumsum(base).reshape(5, 3)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python