You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSCode的Jupyter Notebook中向Python脚本传递NumPy数组?

在Jupyter Notebook中通过%run魔术命令传递NumPy数组给Python脚本

问题根源

%run魔术命令默认会把你传入的参数当作字符串字面量传递给脚本,而非Notebook中已定义的变量引用,所以你拿到的是数组变量的名称字符串,不是实际的NumPy数组。下面是几种可行的解决方法:


方法1:使用-i参数注入Notebook命名空间

这是最简便的方案,-i参数会让脚本直接访问当前Notebook的命名空间,无需手动传参。

Notebook端代码

import numpy as np
# 定义你需要的变量
string1 = "sample_str1"
string2 = "sample_str2"
NumpyArray1 = np.random.rand(432, 532)  # 你的432×532二维矩阵

执行%run命令

%run -i myScript.py

脚本myScript.py代码

直接使用Notebook中定义的变量即可:

import numpy as np

# 直接访问Notebook里的变量
print(type(NumpyArray1))  # 输出:<class 'numpy.ndarray'>
print(NumpyArray1.shape)  # 输出:(432, 532)
print(string1, string2)   # 输出:sample_str1 sample_str2

方法2:序列化数组后传递(适合隔离命名空间场景)

如果不想让脚本直接访问Notebook的命名空间,可以用pickle将数组序列化到临时文件,脚本读取后还原。

Notebook端代码

import pickle
import numpy as np
import os

string1 = "sample_str1"
string2 = "sample_str2"
NumpyArray1 = np.random.rand(432, 532)

# 序列化数组到临时文件
temp_file = "temp_array.pkl"
with open(temp_file, "wb") as f:
    pickle.dump(NumpyArray1, f)

# 传递字符串参数和临时文件名
%run myScript.py $string1 $string2 $temp_file

脚本myScript.py代码

import sys
import pickle
import os

# 获取命令行参数
string1 = sys.argv[1]
string2 = sys.argv[2]
temp_file = sys.argv[3]

# 从临时文件加载数组
with open(temp_file, "rb") as f:
    NumpyArray1 = pickle.load(f)

# 验证结果
print(type(NumpyArray1))
print(NumpyArray1.shape)

# 可选:删除临时文件
os.remove(temp_file)

注意事项

  • 不要尝试用%run myScript.py $NumpyArray1直接传递数组:$符号会把数组转成字符串(比如<numpy.ndarray object at 0x...>),无法还原成原数组。
  • 如果脚本需要接收多个变量,-i参数会自动共享所有Notebook当前命名空间的变量,无需逐个指定。

内容的提问来源于stack exchange,提问作者PPM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:57:23