无法更改代码以列表理解
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 项目列表放入一个位置,该位置只能容纳一个项目。这就是错误的原因。
我的问题有点简单,但我似乎没有找到答案。
我的代码中有以下行可以正常工作:
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 项目列表放入一个位置,该位置只能容纳一个项目。这就是错误的原因。