
我正在使用一个名为 PySD 的包进行系统动力学建模。PySD 将模型从 Vensim(系统动力学建模包)转换为 Python,并允许用户用比 Vensim 更复杂的例程替换各种方程。我正在运行一个具有各种下标的模型,这会创建一种不寻常的输出格式。输出被读入数据帧,其下标元素的各个值最终为 xarray.DataArrays。我想知道如何获取 xarray.DataArrays 的列(最终成为一个系列)并将其转换为二维数组,第二个维度是下标的数量。
import pysd
import numpy as np
model=pysd.load("Example.py")
stocks=model.run
pop=np.array(Population) #Creates an object array
Population=stocks.Populaton #Creates a series
#How to get an array of population values for each country?
Run Code Online (Sandbox Code Playgroud)
example.py代码如下(请记住这是一个任意示例来说明问题)
from __future__ import division
import numpy as np
from pysd import utils
import xarray as xr
from pysd.functions import cache
from pysd import functions
_subscript_dict = {
'Country': ['Canada', 'USA', 'China', 'Norway', 'India', 'England',
'Mexico', 'Yemen']
}
_namespace = { …Run Code Online (Sandbox Code Playgroud) 我有一个大约62,000个数字的列表A,另一个大约370,000个列表B。我想过滤B,使其只包含来自A的元素。我尝试过这样的事情:
A=[0,3,5,73,88,43,2,1]
B=[0,5,10,42,43,56,83,88,892,1089,3165]
C=[item for item in A if item in set(B)]
Run Code Online (Sandbox Code Playgroud)
哪个可行,但是对于这么大的列表显然很慢,因为(我认为吗?)搜索会遍历整个B,即使已经在B中找到了该元素也是如此。因此脚本正在遍历370,000个元素的列表62,000次。
A和B中的元素是唯一的(B包含0到700,000之间的唯一值的列表,而A包含这些值的唯一子集),因此一旦在B中找到A [i],搜索就可以停止。值也按升序排列(如果有任何意义)。
有什么办法可以更快地做到这一点?
谁能告诉我如何修复以下代码?np.where 应该返回索引 0。
import numpy as np
listoftups=[("a", "b"), ("n"), ("c","d","e"), ("f", "g")]
np.where(listoftups==("a", "b"))
Run Code Online (Sandbox Code Playgroud)