在 LCA 中查找排放特定生物圈流的所有过程
Find all processes emitting a certain biosphere flow in LCA
我需要找到 use/emit 某个生物圈在 LCA 中流动的过程。我看到 here 有一些方法看起来像我需要的但是它们被注释掉了。他们真的是我要找的吗?如果没有,有没有办法得到这个?
天真的方法
您可以遍历数据库中的所有生物圈交换:
db = Database("ecoinvent 3.2 cutoff")
some_flow = Database("biosphere3").random()
consumers = {
exc.output
for ds in db
for exc in ds.biosphere()
if exc.input == some_flow
}
这个简单易懂,但是比较慢。
高级方法
您可以对基础数据库执行 SQL 查询:
from bw2data.backends.peewee import ExchangeDataset
consumers_fast = [
get_activity((db.name, obj[0])) for obj in
ExchangeDataset.select(ExchangeDataset.output_code).where(
(ExchangeDataset.input_database == some_flow['database']) &
(ExchangeDataset.input_code == some_flow['code']) &
(ExchangeDataset.output_database == db.name)
).distinct().tuples()
]
注意:高级查询类型在 next Brightway
中会更容易
正在检查 LCA
对象中的生物圈矩阵
您还可以从构造的 LCA
对象中获取此信息:
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
consumers_lca = [get_activity(ra[index]) for index in col_indices.col]
consumers_lca
如果您还想从构建的 LCA
对象中获取库存量:
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_consumers_lca = [lca.inventory[row, index] for index in col_indices.col]
amount_consumers_lca
有了这个,您可以从构建的 LCA
对象中获取仅针对某些过程 (list_of_processes
) using/emitting 生物圈流量 (some_flow
) 的库存量:
process_keys = [obj.key for obj in Database("lci_db") if obj["name"] in list_of_processes]
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_process_keys_lca = [lca.inventory[row, index] for index in col_indices.col if ra[index] in process_keys]
amount_process_keys_lca
我需要找到 use/emit 某个生物圈在 LCA 中流动的过程。我看到 here 有一些方法看起来像我需要的但是它们被注释掉了。他们真的是我要找的吗?如果没有,有没有办法得到这个?
天真的方法
您可以遍历数据库中的所有生物圈交换:
db = Database("ecoinvent 3.2 cutoff")
some_flow = Database("biosphere3").random()
consumers = {
exc.output
for ds in db
for exc in ds.biosphere()
if exc.input == some_flow
}
这个简单易懂,但是比较慢。
高级方法
您可以对基础数据库执行 SQL 查询:
from bw2data.backends.peewee import ExchangeDataset
consumers_fast = [
get_activity((db.name, obj[0])) for obj in
ExchangeDataset.select(ExchangeDataset.output_code).where(
(ExchangeDataset.input_database == some_flow['database']) &
(ExchangeDataset.input_code == some_flow['code']) &
(ExchangeDataset.output_database == db.name)
).distinct().tuples()
]
注意:高级查询类型在 next Brightway
中会更容易正在检查 LCA
对象中的生物圈矩阵
您还可以从构造的 LCA
对象中获取此信息:
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
consumers_lca = [get_activity(ra[index]) for index in col_indices.col]
consumers_lca
如果您还想从构建的 LCA
对象中获取库存量:
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_consumers_lca = [lca.inventory[row, index] for index in col_indices.col]
amount_consumers_lca
有了这个,您可以从构建的 LCA
对象中获取仅针对某些过程 (list_of_processes
) using/emitting 生物圈流量 (some_flow
) 的库存量:
process_keys = [obj.key for obj in Database("lci_db") if obj["name"] in list_of_processes]
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_process_keys_lca = [lca.inventory[row, index] for index in col_indices.col if ra[index] in process_keys]
amount_process_keys_lca