Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将一系列xarray.DataArrays转换为numpy数组

将一系列xarray.DataArrays转换为numpy数组
EN

Stack Overflow用户
提问于 2017-10-26 15:15:28
回答 1查看 9.7K关注 0票数 3

我正在使用一个名为PySD的包进行系统动力学建模。PySD将Vensim (系统动力学建模包)中的模型转换为python,并允许用户用比Vensim更复杂的例程替换各种方程。我正在运行一个具有多种下标的模型,这会创建一个不寻常的输出格式。输出被读入数据帧,其订阅元素的单个值最终为xarray.DataArrays。我想知道如何获取xarray.DataArrays的一列(最后是一个系列),并将其转换为二维数组,第二维空间是下标的数量。

代码语言:javascript
运行
AI代码解释
复制
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?

example.py代码如下(请记住,这是一个说明问题的任意示例)

代码语言:javascript
运行
AI代码解释
复制
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 = {   
    'TIME': 'time',
    'Time': 'time',
    'Deaths': 'deaths',
    'Births': 'births',
    'Population': 'population',
    'Birth rate': 'birth_rate',
    'Murder rate': 'murder_rate',
    'Natural death rate': 'natural_death_rate',
    'FINAL TIME': 'final_time',
    'INITIAL TIME': 'initial_time',
    'SAVEPER': 'saveper',
    'TIME STEP': 'time_step'
}

@cache('step')
def deaths():

    return murder_rate() * population() + natural_death_rate() * population()


@cache('step')
def births():
    return birth_rate() * population()


@cache('step')
def population():
    return integ_population()


@cache('run')
def birth_rate():

    return utils.xrmerge([
        xr.DataArray(
            data=[5., 5., 5., 5., 5., 5., 5., 5.],
            coords={
                'Country':
                ['Canada', 'USA', 'China', 'Norway', 'India', 'England', 'Mexico', 'Yemen']
            },
            dims=['Country']),
        xr.DataArray(data=[10.], coords={'Country': ['Mexico']}, dims=
['Country']),
        xr.DataArray(data=[8.], coords={'Country': ['Yemen']}, dims=
['Country']),
    ])


@cache('step')
def murder_rate():
    return time()


@cache('run')
def natural_death_rate():
    return utils.xrmerge([
        xr.DataArray(
            data=[3., 3., 3., 3., 3., 3., 3., 3.],
            coords={
                'Country':
                ['Canada', 'USA', 'China', 'Norway', 'India', 'England', 'Mexico', 'Yemen']
            },
            dims=['Country']),
        xr.DataArray(data=[5.], coords={'Country': ['Yemen']}, dims=['Country']),
    xr.DataArray(data=[5.], coords={'Country': ['Mexico']}, dims=['Country']),
    ])


@cache('run')
def final_time():
    return 100


@cache('run')
def initial_time():
    return 0


@cache('step')
def saveper():
    return time_step()


@cache('run')
def time_step():
    return 1


def _init_population():
    return xr.DataArray(
        data=np.ones([8]) * 10,
        coords={
            'Country': ['Canada', 'USA', 'China', 'Norway', 'India', 'England', 'Mexico', 'Yemen']
        },
        dims=['Country'])


@cache('step')
def _dpopulation_dt():
    return births() - deaths()


integ_population = functions.Integ(lambda: _dpopulation_dt(), lambda: _init_population())

如果example.py文件选项卡不对,我很抱歉。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 11:36:04

感谢大家分享这个数据的例子。

首先,将xarray.DataArray对象作为标量嵌套在pandas.DataFrame中是非常不标准的处理x数组和熊猫的方法。我不推荐。如果每个条目都是共享(部分)相同维度的DataArray,那么处理数据的最简单的方法就是xarray.Dataset,xarray的多维pandas.DataFrame版本。

也就是说,将数据从这种格式转换为非嵌套对象应该很容易。最好的起点是Series.values,它将列提取为一维numpy数组。然后,您可以迭代这个系列,并将每个DataArray转换为一个带有.values的numpy数组。把这些放在一起:

代码语言:javascript
运行
AI代码解释
复制
population_numpy_array = np.stack(
    [data_array.values for data_array in df['Population'].values])

或者,您可以使用xarray堆栈DataArray对象。这将保留标签,这将使您的数据更易于使用:

代码语言:javascript
运行
AI代码解释
复制
population_data_array = xr.concat(df['Population'].values, dim='row_name')

您甚至可以将完整的对象转换为xarray.Dataset进行联合分析:

代码语言:javascript
运行
AI代码解释
复制
ds = xr.Dataset({k: xr.concat(df[k].values, dim='row_name') for k in df.keys()})

(可以说,这正是PySD应该做的。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46965200

复制
相关文章
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
Python 是一种功能强大的编程语言,具有大量的库和模块。其中一个库是 NumPy,它用于数值计算和处理大型多维数组和矩阵。另一个用于Python图像处理的流行库是Pillow,它是Python Imaging Library(PIL)的一个分支。
很酷的站长
2023/08/11
6600
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.9K0
如何正确的将数组转换为ArrayList?
对于不可变集合,你可以使用ImmutableList类及其of()与copyOf()工厂方法:(参数不能为空)
崔笑颜
2020/06/08
3.5K0
java中如何将数组转换为List
如何将其转换为ArrayList <Element> arraylist = ???
硬核编程
2020/07/23
3.2K0
outputstream转byte数组_int类型转换为byte类型
Java中将inputstream输入流转换成byte[]字节数组
全栈程序员站长
2022/11/08
7.9K0
Java将列表转换为数组,反之亦然
在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。
用户7886150
2021/04/28
3.5K0
Js根据相同值将数组转换为二维数组
let list = [{ id: 1 }, { id: 1 }, { id: 2 }] let arr = Objec
明知山
2021/06/29
5.6K0
python文字转图片(二值、RGB)以及numpy数组
文字一般使用unicode等编码的形式在计算机中表示,但是其形态本身也很有价值。如果能够把文字转为图片,就可以做一些应用,比如:
blmoistawinde
2020/05/09
5.1K0
python文字转图片(二值、RGB)以及numpy数组
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
24K0
c++如何将字符串转为数组(将字符串转换为数组)
string [] imgArr=imgData.Split(new char[]{‘,’});
全栈程序员站长
2022/07/29
7.2K0
[C-C++]将数值变量转换为数组(int/double/float 转化为 char*)
原文链接:https://blog.csdn.net/humanking7/article/details/80175934
祥知道
2020/03/10
2K0
Numpy数组
一、NumPy简介 NumPy是针对多维数组(Ndarray)的一个科学计算(各种运算)包,封装了多个可以用于数组间计算的函数。 数组是相同数据类型的元素按一定顺序排列的组合,注意必须是相同数据类型的,比如说全是整数、全是字符串等。 array([1,2,3]) # 数值型数组 array(['w','s','q'],dtype = '<U1') # 字符型数组 二、NumPy 数组的生成 要使用 NumPy,要先有符合NumPy数组的数据,不同的包
见贤思齊
2020/08/05
4.9K0
Numpy数组
Numpy 中 axis = n 对应 ndarray 的第 nnn 层 [],从最外层的 axis = 0,逐渐往内层递增。
hotarugali
2022/03/03
8110
Numpy数组
numpy转tensorflow_pytorch numpy
.numpy()和.from_numpy()负责将tensor和numpy中的数组互相转换,共享共同内存,不共享地址 torch.tensor()复制数据,但不共享地址
全栈程序员站长
2022/09/27
4100
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.6K0
Python - 将matplotlib图像转换为numpy.array 或 PIL.Image
matplotlib是python图像处理中让人又爱又恨的库。最近遇到了需要获取plt图像数据的需求,本文记录了将matplotlib图像转换为numpy.array 或 PIL.Image的方法。 众所周知,这个库处理图像会出现内存泄漏的问题,原想着将plt的图转出来用opencv存就好了,然而并没有,牢骚完毕。 转换思路 总体分为两步完成目标: 将plt或fig对象转为argb string的对象 将argb string对象图像转为array 或 Image 步骤一 区分对象为pl
为为为什么
2022/08/04
1.9K0
如何将 Java 8 中的流转换为数组
最简单地方式就是使用 toArray(IntFunction<A[]> generator) 方法,该方法也是 Java API 所建议使用的方法,详情请戳
村雨遥
2022/06/15
4.1K0
JavaScrip将数组转为对象(JS数组转对象工作经常用)
我想获取一个元素数组,并将它们转换为一个对象。数组中的元素需要是对象的键,带有一些默认的空字符串,作为以后要更改的值。
IT工作者
2021/12/29
7.3K0
python通过fancy indexing把数组转换为one hot编码的numpy array
背景 实现一维numpy数组 a = array([1,0,3]) 转换为2维的 1-hot数组 b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]]) python实现示例代码 import numpy as np if __name__ == '__main__': ind = np.array([1, 0, 3]) x = np.zeros((ind.size, ind.max() + 1)) x[np.arange(ind.size), i
lovelife110
2021/01/14
1.4K0
点击加载更多

相似问题

将一系列MR case转换为numpy数组

121

将numpy数组类型: float32转换为char

12

如何将numpy数组从numpy.int64转换为datetime?

10

将numpy数组转换为numpy数组

26

如何将一系列数组转换为二维numpy数组

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档