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