gpt4 book ai didi

python - 制作一个 n 列的数组,其中每个连续的行增加一个

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:55 25 4
gpt4 key购买 nike

在 numpy 中,我希望能够为行输入 n,为列输入 m,并以如下所示的数组结尾:

[(0,0,0,0),
(1,1,1,1),
(2,2,2,2)]

所以这将是 3x4。每列只是前一列的副本,并且该行每次增加一。举个例子:输入将是 4,然后是 6,输出将是数组

[(0,0,0,0,0,0),
(1,1,1,1,1,1),
(2,2,2,2,2,2),
(3,3,3,3,3,3)]

4 行 6 列,每行增加 1。谢谢你的时间。

最佳答案

这么多的可能性......

In [51]: n = 4

In [52]: m = 6

In [53]: np.tile(np.arange(n), (m, 1)).T
Out[53]:
array([[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3]])

In [54]: np.repeat(np.arange(n).reshape(-1,1), m, axis=1)
Out[54]:
array([[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3]])

In [55]: np.outer(np.arange(n), np.ones(m, dtype=int))
Out[55]:
array([[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3]])

还有一个。这里巧妙的技巧是值不重复——只为单个序列 [0, 1, 2, ..., n-1] 分配内存。

In [67]: from numpy.lib.stride_tricks import as_strided

In [68]: seq = np.arange(n)

In [69]: rep = as_strided(seq, shape=(n,m), strides=(seq.strides[0],0))

In [70]: rep
Out[70]:
array([[0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3]])

小心 as_strided 函数。如果参数不正确,可能会使 Python 崩溃。

查看seq没有被复制,改变seq,然后检查rep:

In [71]: seq[1] = 99

In [72]: rep
Out[72]:
array([[ 0, 0, 0, 0, 0, 0],
[99, 99, 99, 99, 99, 99],
[ 2, 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3, 3]])

关于python - 制作一个 n 列的数组,其中每个连续的行增加一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19016817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com