我有一个旧的遗留Fortran代码,将从Python调用.
在此代码中,数据数组由某种算法计算.我简化了它:假设我们有10个元素要继续(在实际应用中它通常是10e + 6而不是10):
number_of_elements = 10
element_id_1 = [0, 1, 2, 1, 1, 2, 3, 0, 3, 0] # size = number_of_elements
element_id_2 = [0, 1, 2] # size = max(element_id_1)
Run Code Online (Sandbox Code Playgroud)
然后按如下方式使用这些数组:
my_element = one_of_my_10_elements # does not matter where it comes from
my_element_position = elt_position_in_element_id_1 # does not matter how
id_1 = element_id_1[my_element_position]
if id_1 == 0:
id_2 = None
else:
id_2 = element_id_2[id_1-1]
modify(my_element, some_other_data[id_2])
Run Code Online (Sandbox Code Playgroud)
什么是Pythonic/numpy管理这种关系的方式,即获得id_2给定元素?
我已经看过掩盖的阵列,但我还没有找到一种方法来使用它们进行这种配置.为元素实现一个类,id_2它将在计算后存储并稍后提供它,这让我想到与数组操作相比非常差的计算时间.我错了吗?
UPD.遗留代码中当前完成的更大范例:
import numpy as np
number_of_elements …Run Code Online (Sandbox Code Playgroud) 让我们考虑一个应用程序,其中有一个基类 Move 及其变体 Walk 和 Run。我想将它们分成不同的类。我还希望能够从基类中获取可能的动作列表。就像是:
模块 1:
class Move(object): pass
Run Code Online (Sandbox Code Playgroud)
模块 2:
from module1 import Move
class Walk(Move): pass
Run Code Online (Sandbox Code Playgroud)
主要脚本:
from module1 import *
from module2 import *
print Move.__subclasses__()
Run Code Online (Sandbox Code Playgroud)
如果没有这两个导入行,main将不会返回任何子类。这似乎是预期的行为。
我希望将来能够添加更多的运动模块,而无需修改现有的源代码。
我正在考虑发现并导入给定目录中的所有 python 文件,类似于此处所做的操作:Python __subclasses__() notlisting subclasses
有没有更干净的方法来完成这样的任务?