利用 Numpy 数组构建动态方程输入

在编写一个接受用户输入数据并输出 NumPy 数组的类/函数时,需要构建一个输入数组。这个数组应该包括以下信息:

  • zone_id - 数据库中的 ID,类型为整数。
  • model size - 模型大小,类型为整数。
  • type of analysis - 分析类型,可以是以下几种之一:
    • type 1 - 整数或字符串。
    • type 2 - 整数或字符串。
    • type 3 - 整数或字符串。
  • model purposes - 模型目的,类型为字符串数组。
    • default: ONE、TWO、THREE(这只是目的的标题)。
    • Custom: default + 其他(0 到 15 个目的)。
  • Modeling step 1: 一些社会经济因素,类型为字典数组(字典的键是活动类型,如零售、非零售等,值是与该活动相关的数值)。
  • Modeling step 2:
    • Default: 零售/非零售方程系数,类型为字典(字典的键是活动类型,如零售、非零售等,值是与该活动相关的数值)。
    • Custom: 由用户定义的每个额外活动方程系数,类型为字典数组(字典的键是活动类型,如零售、非零售等,值是与该活动相关的数值)。

一个示例数组如下:

def_array = (zone_id, model_size, analysis_type,
             model_purpose[],
             socio_economics[],
             socio_coefficients[] )

一个数值示例如下:

my_arr = [np.array([ 10001, 1, 2,
                   [ 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE' ],
                   [ {'retail':500, 'non_retail':300, 'school':300', 'other':900} ],
                   [ {'retail':500, 'non_retail':300, 'school':300', 'other':900} ],
                   [ {'ONE':{'retail':.5, 'non_retail':1.7, 'school':.4', 'other':4.7},
                     {'TWO':{'retail':.2, 'non_retail':2.5, 'school':.5', 'other':4.3},
                     {'THREE':{'retail':.3, 'non_retail':2.3, 'school':.6', 'other':2.2},
                     {'FOUR':{'retail':.4, 'non_retail':1.1, 'school':.7', 'other':1.0},
                     {'FIVE':{'retail':7, 'non_retail':2, 'school':3', 'other':1} ] ])

这个数组将被插入到 3 个函数中,然后一起返回以下数组:

arr_results = [np.array([ 10001, one_1, TWO_1, THREE_1, FOUR_1, FIVE_1, ONE_2, TWO_2, THREE_2, FOUR_2, FIVE_2],
                        [10002, .... ,] ])

问题是,在定义输入数组时,最好的选择是什么?

2、解决方案

方法一:使用字典

NumPy 数组不适合这种场景,因为它们专为对大量相似数据(例如大型矩阵)进行数值操作而设计。在这个案例中,可以使用字典来存储数据,如下所示:

options = {
    "zone_id": 10001,
    "model_size": 1,
    "analysis_type": 2,
    "model_purposes": [ "ONE", ... ]
    ...
}

然后,可以通过将字典传递给函数,或者使用 ** 解包将其解包为命名参数,将字典传递给函数:

def do_stuff(zone_id=10001, model_size=1, ...):
    ...

do_stuff(**options)

方法二:使用自定义选项类

如果需要更复杂的数据类型(例如,如果需要动态计算某些选项或使某些选项依赖于其他选项),可以使用专门的选项类,如下所示:

class Options:
    def __init__(self):
        # set some default values
        self.zone_id = 10001

    def populate_values(self):
        # maybe handle some user input?
        self.name = input("name: ")

    # use a property to calculate model_size on the fly
    @property
    def model_size(self):
        return 2-1

然后,按如下方式使用该类:

```python
options = Options()
options.populate_values()
print(options.model_size)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值