我有一个 Python 脚本,它通过在 VScode 上运行的 Jupyter Notebook 执行。我正在使用 run magic 命令运行它。该脚本需要一些 NumPy 数组和字符串作为输入,这些数组存储为 Jupiter 变量。我虽然使用
args = sys.argv
就足够了,但是在调试时我意识到脚本内的参数实际上是作为输入传递的字符串,而不是存储在这些名称下的数组。例如在
%run myScript string1 string2 NumpyArray1
脚本内的变量是字符串“NumpyArray1”,而不是笔记本的 Jupyter:variables 中以名称“NumpyArray1”存储的数组。 'NumpyArray1' 是一个 2D 矩阵 (432x532)
有人可以向我解释如何将数组作为脚本的输入传递吗?
提前致谢!
您不能真正将数组作为命令行参数传递(至少不能以非常优雅的方式传递)。你能做的就是给命令行提供一堆数字,用逗号分隔,不带括号。
python myScript 3,1,4, etc.
之后,只需在 argv[] 上使用简单的分割,如下所示
import sys
arr = sys.argv[1].split(',')
print(arr[2])
你可以做这样的事情来自动化
#python script.py '1,2,3,4,5,6,7,8,9'
import numpy as np
import sys
import numpy as np
def numpy_array_to_csv_string(np_array):
csv_string = np.array2string(np_array, separator=',')
return csv_string[1:-1] # Remove the surrounding square brackets
def process_csv(csv_string):
# Convert the CSV string back to a NumPy array
np_array = np.fromstring(csv_string, sep=',')
# Reshape the array if necessary (e.g., if it was a 2D array)
# np_array = np_array.reshape((num_rows, num_columns))
# Do whatever processing you want with the NumPy array here
print("NumPy Array:")
print(np_array)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py 'csv_data'")
else:
csv_data = sys.argv[1]
process_csv(csv_data)