将参数(NumPy 数组)传递到 Jupyter 笔记本中的 Python 脚本

问题描述 投票:0回答:2

我有一个 Python 脚本,它通过在 VScode 上运行的 Jupyter Notebook 执行。我正在使用 run magic 命令运行它。该脚本需要一些 NumPy 数组和字符串作为输入,这些数组存储为 Jupiter 变量。我虽然使用

args = sys.argv
就足够了,但是在调试时我意识到脚本内的参数实际上是作为输入传递的字符串,而不是存储在这些名称下的数组。例如在

%run myScript string1 string2 NumpyArray1  

脚本内的变量是字符串“NumpyArray1”,而不是笔记本的 Jupyter:variables 中以名称“NumpyArray1”存储的数组。 'NumpyArray1' 是一个 2D 矩阵 (432x532)

有人可以向我解释如何将数组作为脚本的输入传递吗?

提前致谢!

python jupyter-notebook parameter-passing numpy-ndarray
2个回答
0
投票

您不能真正将数组作为命令行参数传递(至少不能以非常优雅的方式传递)。你能做的就是给命令行提供一堆数字,用逗号分隔,不带括号。

python myScript 3,1,4, etc.

之后,只需在 argv[] 上使用简单的分割,如下所示

import sys
arr = sys.argv[1].split(',')
print(arr[2])

0
投票

你可以做这样的事情来自动化

#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)
© www.soinside.com 2019 - 2024. All rights reserved.