我不知道你为什么希望它“这个数组 [看起来?] 像一个 JavaScript 数组,所以我假设(因为我可以在没有相反信息的情况下随意做)你希望将数组传达给一些不幸的前端进程:近 400 万个元素仍然是通过网络管道喷射的大量数据。因此,与往常一样,问题的一些背景会有所帮助(您可以编辑您的问题以提供它)。
假设您想要序列化数据以进行传输或存储,那么将其呈现为 JavaScript 可理解的字符串的最简单方法(我不知道“[look?] like”是什么意思)使用json标准库。由于除了整数、浮点数、真值和字符串的列表和字典之外,它不能对任何内容进行原生编码,因此您仍然面临如何最好地将矩阵表示为列表的问题。
小例子,但你必须接受这是在黑暗中随机拍摄的。第一的
让我们创建一个可管理的数据集来使用:
a = np.random.randn(4, 5)
这不能直接用 JSON 表示:
import json
try:
json.dumps(a)
except Exception as e:
print "Exception", e
导致相当冗长(它可能只是调用对象的repr)但可以理解和真实的消息
Exception array([[ 1.24064541, 0.97989932, -0.8469167 , -0.27318908, 1.21954134],
[-1.30172725, 0.41261504, 1.39895842, 0.75260258, -1.34749298],
[-0.38415007, -0.56925321, -1.59202204, 1.29900292, 1.91357277],
[ 1.06254537, 2.75700739, -0.66371951, 1.36906192, -0.3973517 ]]) is not JSON serializable
如果我们要求解释器将数组转换为列表,它会半心半意地将其转换为数组对象的列表:
list(a)
显示为结果
[array([ 1.24064541, 0.97989932, -0.8469167 , -0.27318908, 1.21954134]),
array([-1.30172725, 0.41261504, 1.39895842, 0.75260258, -1.34749298]),
array([-0.38415007, -0.56925321, -1.59202204, 1.29900292, 1.91357277]),
array([ 1.06254537, 2.75700739, -0.66371951, 1.36906192, -0.3973517 ])]
使用相同的函数将 那些 数组转换为列表会产生一个可用的列表列表:
list(list(r) for r in a)
评估到
[[1.2406454087805279,
0.97989932000522928,
-0.84691669720415574,
-0.27318907894171163,
1.219541337120247],
[-1.3017272505660062,
0.41261503624079976,
1.3989584188044133,
0.75260257672408482,
-1.3474929807527067],
[-0.38415007296182629,
-0.56925320938196644,
-1.5920220380072485,
1.2990029230603588,
1.9135727724853433],
[1.0625453748520415,
2.7570073901625185,
-0.66371950666590918,
1.3690619178580901,
-0.39735169991907082]]
这完全可以转换为 JSON,我在这里通过将其转换为字符串来实现:
json.dumps(list(list(r) for r in a))
给出(字符串)结果
'[[1.2406454087805279, 0.97989932000522928, -0.84691669720415574, -0.27318907894171163, 1.219541337120247], [-1.3017272505660062, 0.41261503624079976, 1.3989584188044133, 0.75260257672408482, -1.3474929807527067], [-0.38415007296182629, -0.56925320938196644, -1.5920220380072485, 1.2990029230603588, 1.9135727724853433], [1.0625453748520415, 2.7570073901625185, -0.66371950666590918, 1.3690619178580901, -0.39735169991907082]]'
您可以通过重构列表列表并将其与数组进行比较来检查结果是否正确(因为其中一个参数是一个 numpy 数组,所以比较是按元素进行的):
s = json.dumps(list(list(r) for r in a))
lofls = json.loads(s)
lofls == a
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
我是否正确理解了您的问题?