簡體   English   中英

下標問題(腳本實例化並從另一個腳本調用)只運行被調用的 function,而不是整個腳本

[英]Issue with subscript (script instantiated and called from another script) only running the called function, but not the entire script

目標:從上標開始,for 循環的每次迭代,將列表發送到下標中的 function,更新該列表,退出下標中的 function,並執行幾個操作,然后進入下一次迭代。

問題:只有我從上標調用的 function 運行,而不是整個下標。

CrossValidationSmall.py(上標)

import subfileTest

data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K']
n = 2

for start in range(0, len(data), n):
    stop = start + n
    test = data[start: stop]
    train = data[:start] + data[stop:]
    subfileTest.set_train_data(train)

subfileTest.py(下標)

train_data = []

def set_train_data(train):
    global train_data
    train_data = train

print(train_data) #should output the lists each time subfileTest is called.

預計 Output

MacBook-Pro:SmallerEnviromentTest Me$ python CrossValidationSmall.py
['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'G', 'H', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'I', 'J', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']

當前 Output

MacBook-Pro:SmallerEnviromentTest Me$ python CrossValidationSmall.py
[]

據我了解,您需要在每次迭代時完整調用您的下標。

事情是這樣的:

  • 一個新的模塊一旦被發現就會被執行,並且來自初始執行的模塊被緩存
  • 當在不同的文件中導入相同的模塊時,將返回緩存的版本。
  • 此緩存版本在進程的整個生命周期內都存在。

由於您需要在每次迭代時重新運行下標,因此可以使用 Class。 class 的 object 至:

  • 存儲每次迭代的數據
  • 編寫任意數量的函數來處理這些數據
  • 根據需要保留每個 object 的值

上標

from subscript import ModelCrossValidator

trial = 0

data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
n = 2

for start in range(0, len(data), n):
    trial += 1

    stop = start + n
    test = data[start: stop]

    # train_subset to be used for cross validation
    train_subset = data[:start] + data[stop:]

    cross_validator = ModelCrossValidator(train_subset)
    cross_val_score = cross_validator.calc_score()

print("CrossValSet: {}, Data: {}, Score: {:.2}".format(trial, cross_validator.data, cross_val_score))

下標

import random

class ModelCrossValidator:

    def __init__(self, train_subset):
        self.data = train_subset     # your folded cross-val data
        self.model = None            # can pass in a model too here
        self.accuracy = 0            # other fields that you might need

    def calc_score(self):
        # you can have any number of functions like this.
        # all will deal with only the data from a single object.

        self.accuracy = 0.8 + (random.random()) % 0.2
        return self.accuracy

Output:

Macbook-Pro: chimichanga$ python superscript.py 
CrossValSet: 1, Data: ['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'], Score: 0.89
CrossValSet: 2, Data: ['A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'K'], Score: 0.94
CrossValSet: 3, Data: ['A', 'B', 'C', 'D', 'G', 'H', 'I', 'J', 'K'], Score: 0.9
CrossValSet: 4, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'I', 'J', 'K'], Score: 0.84
CrossValSet: 5, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K'], Score: 0.88
CrossValSet: 6, Data: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], Score: 0.94

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM