无法更改代码以列表理解

Can't change the code to list comprehension

我的问题有点简单,但我似乎没有找到答案。

我的代码中有以下行可以正常工作:

Uniquesample = np.matrix([[   1.   ,    0.   ],
                   [   2.   , -106.965],
                   [   3.   ,  -83.835],
                   [   4.   ,   12.5  ],
                   [   5.   , -141.6  ],
                   [   6.   ,  -17.25 ],
                   [   7.   ,  -94.785],
                   [   8.   ,  -26.785],
                   [   9.   , -125.835],
                   [  10.   ,    6.865],
                   [  11.   ,   16.23 ],
                   [  12.   ,   61.45 ],
                   [  13.   ,   42.625],
                   [  14.   , -163.655],
                   [  15.   , -116.3  ],
                   [  16.   ,   15.82 ],
                   [  17.   , -166.055],
                   [  18.   ,   90.025],
                   [  19.   ,   14.215],
                   [  20.   ,   82.465]])
L, W = Uniquesample.shape
ModelNumber = 8
Members = np.zeros((L,ModelNumber*W))

seq=[4, 7, 9, 2, 15, 16, 19]
i=0
Count = [7]
for j in seq:
    Members[:Count[i]:,W*i:W*(i+1)] = Uniquesample[j]

Ps: Uniquesample 是一个 800 x 2 矩阵,所以为了简单起见,我只把前 20 行放在这里。 我尝试使用“列表理解”将 for 循环更改为另一种格式:

Members[:Count[i]:,W*i:W*(i+1)] = [Uniquesample[j] for j in seq]

但是不行。我收到以下错误:“ValueError:设置带有序列的数组元素。请求的数组将超过最大维数 2。”

事情是这样的。我是否将代码正确地“翻译”为列表理解格式?

非常感谢

我在下面的例子中使用了 seq=[4, 7, 9, 2, 15, 16, 19]。初始 Members 数组如下所示:

在 for 循环中,Members[:Count[i]:,W*i:W*(i+1)] = Uniquesample[j] 将用 for 循环中的最终值替换那些 7x2 元素(红色)。

然而,列表推导式 Members[:Count[i]:,W*i:W*(i+1)] = [Uniquesample[j] for j in seq] 将以不同方式分配每个元素。

仅供参考,我使用的是 numpy 版本“1.18.5”,因此由于旧的 numpy 版本,它可能无法 运行 在 www.onlinegdb.com 上正确运行。

重点是,在第一个代码中,您每次在 Members[:Count[i]:,Wi:W(i +1)]。首先 Uniquesample[0] 到 Members[:Count[i]:,Wi:W(i+1)],然后 Uniquesample[1] 到相同的 Members[:Count[i] :,Wi:W(i+1)] 等等.

在您的第二个代码中,您试图将 Uniquesample 项目列表放入一个位置,该位置只能容纳一个项目。这就是错误的原因。