Python中打印含两个numpy数组的列表时仅输出最后一个数组的问题
问题:循环生成numpy数组列表时仅输出最后一个元素
我尝试打印由两个numpy数组组成的Path列表,但当前代码仅输出最后一个数组。
相关代码
import numpy as np Ii01 = [np.array([[0, 2], [0, 3], [0, 4], [1, 5], [2, 3], [2, 4], [3, 1], [3, 5], [4, 3], [4, 6], [5, 6], [5, 7], [5, 8], [6, 7], [6, 8], [7, 8]]), np.array([[0, 2], [0, 3], [0, 4], [1, 5], [2, 3], [2, 4], [3, 1], [3, 5], [4, 3], [4, 6], [4, 7], [5, 8], [5, 9], [6, 7], [7, 5], [7, 8], [7, 9], [8, 9]])] Iv01 = [np.array([[0.5928417218382795 ], [1.0598523225018839 ], [1.0038922911359835 ], [0.5228083275600917 ], [0.45152663276269006 ], [0.33163464481335625 ], [0.6382821834929433 ], [1.1929711967814043 ], [0.151430568179323 ], [1.2882852997187433 ], [0.020634234459323438], [0.3371248675176444 ], [1.0339712303899318 ], [0.3170028087537722 ], [1.0107667057670484 ], [0.645202745957077 ]]), np.array([[0.6413512609273813 ], [1.101096390751953 ], [1.1271899958869345 ], [0.5129288710922218 ], [0.44299417932362256], [0.39992456692863954], [0.6262206291648664 ], [1.1704277398685619 ], [0.0811025900626848 ], [0.4804819688823268 ], [1.1198920618079702 ], [0.33075425274871 ], [1.0794187146885863 ], [0.5875522376738217 ], [0.05687040105172758], [0.3822797557154033 ], [1.1388373266868645 ], [0.6979967492676955 ]])] for i in range(0,len(Ii01)): uniq = np.unique(Ii01[i][:, 1][None, :]) y =Iv01[i][:, 0] x = Ii01[i][:, 1][:, None] == uniq output = np.vstack((np.linalg.lstsq(x, y, rcond=None)[0], uniq)).T Path=output[:,0] Path = np.insert(Path, 0, 10) #fixed inlet print([Path])
当前输出
[array([10. , 0.6262206291648664 , 0.6413512609273813 , 0.5417310533794202 , 0.763557281407787 , 0.580075670670837 , 0.48048196888232686, 0.8537221497408958 , 0.35651700423205657, 0.9720842635477158 ])]
期望输出
[array([10. , 0.6382821834929432 , 0.5928417218382795 , 0.5542698411479658 , 0.6677634679746701 , 0.8578897621707481 , 0.6544597670890333 , 0.32706383813570833, 0.8966468940380192 ]), array([10. , 0.6262206291648664 , 0.6413512609273813 , 0.5417310533794202 , 0.763557281407787 , 0.580075670670837 , 0.48048196888232686, 0.8537221497408958 , 0.35651700423205657, 0.9720842635477158 ])]
解决方案
问题核心是循环中每次都用新生成的数组覆盖了Path变量,没有保存每次循环的结果。只需初始化一个空列表存储所有生成的Path,再打印该列表即可。
修改后的代码
import numpy as np Ii01 = [np.array([[0, 2], [0, 3], [0, 4], [1, 5], [2, 3], [2, 4], [3, 1], [3, 5], [4, 3], [4, 6], [5, 6], [5, 7], [5, 8], [6, 7], [6, 8], [7, 8]]), np.array([[0, 2], [0, 3], [0, 4], [1, 5], [2, 3], [2, 4], [3, 1], [3, 5], [4, 3], [4, 6], [4, 7], [5, 8], [5, 9], [6, 7], [7, 5], [7, 8], [7, 9], [8, 9]])] Iv01 = [np.array([[0.5928417218382795 ], [1.0598523225018839 ], [1.0038922911359835 ], [0.5228083275600917 ], [0.45152663276269006 ], [0.33163464481335625 ], [0.6382821834929433 ], [1.1929711967814043 ], [0.151430568179323 ], [1.2882852997187433 ], [0.020634234459323438], [0.3371248675176444 ], [1.0339712303899318 ], [0.3170028087537722 ], [1.0107667057670484 ], [0.645202745957077 ]]), np.array([[0.6413512609273813 ], [1.101096390751953 ], [1.1271899958869345 ], [0.5129288710922218 ], [0.44299417932362256], [0.39992456692863954], [0.6262206291648664 ], [1.1704277398685619 ], [0.0811025900626848 ], [0.4804819688823268 ], [1.1198920618079702 ], [0.33075425274871 ], [1.0794187146885863 ], [0.5875522376738217 ], [0.05687040105172758], [0.3822797557154033 ], [1.1388373266868645 ], [0.6979967492676955 ]])] # 初始化空列表存储所有Path Paths = [] for i in range(len(Ii01)): uniq = np.unique(Ii01[i][:, 1][None, :]) y =Iv01[i][:, 0] x = Ii01[i][:, 1][:, None] == uniq output = np.vstack((np.linalg.lstsq(x, y, rcond=None)[0], uniq)).T Path=output[:,0] Path = np.insert(Path, 0, 10) #fixed inlet Paths.append(Path) # 将当前Path添加到列表中 print(Paths)
修改点说明
- 循环前新增
Paths = [],创建空列表用于存储每次循环生成的数组 - 循环内新增
Paths.append(Path),把每次生成的Path存入列表 - 最后打印
Paths而不是[Path]
运行修改后的代码即可得到包含两个numpy数组的列表,与期望输出一致。
内容的提问来源于stack exchange,提问作者user19657580
相关产品推荐
相关产品推荐

