首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xarray中的乘法

xarray中的乘法
EN

Stack Overflow用户
提问于 2021-02-24 15:22:54
回答 1查看 270关注 0票数 0

我们知道xarray通过标签来处理数据。也就是说,将两个数据集相加或相乘是在相同的维度和坐标下进行的。然而,我有一个关于xarray乘法运算后结果的形状的问题。

代码如下所示:

代码语言:javascript
复制
import xarray as xr
import numpy as np
a = xr.DataArray([0,1,2,3],dims=['x'],
                 coords={'x':[10,20,30,40]})
b = xr.DataArray(np.array([[0,1,2,3],[0,100,200,300]]),
                 dims=['y','x'],
                 coords={'y':['y1','y2'],'x':[10,20,30,40]})
print(a*b)
print(b*a)

第一个结果是

代码语言:javascript
复制
<xarray.DataArray (x: 4, y: 2)>
array([[  0,   0],
       [  1, 100],
       [  4, 400],
       [  9, 900]])
Coordinates:
  * x        (x) int64 10 20 30 40
  * y        (y) <U2 'y1' 'y2'

第二个结果是

代码语言:javascript
复制
<xarray.DataArray (y: 2, x: 4)>
array([[  0,   1,   4,   9],
       [  0, 100, 400, 900]])
Coordinates:
  * y        (y) <U2 'y1' 'y2'
  * x        (x) int64 10 20 30 40

实际上,第一个和第二个是相等的,因为xarray是基于标签的,然而,为什么第一个结果的形状是4,2,第二个是2,4?谁能告诉我?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 01:51:35

(a*b.T)(b.T*a)都使用shape [4,2]生成数组

我相信这是因为b.T更改了b中的DataArray维度顺序,而不是坐标顺序。

比较b和b:

代码语言:javascript
复制
print(b)
代码语言:javascript
复制
<xarray.DataArray (y: 2, x: 4)>
array([[  0,   1,   2,   3],
       [  0, 100, 200, 300]])
Coordinates:
  * y        (y) <U2 'y1' 'y2'
  * x        (x) int64 10 20 30 40
代码语言:javascript
复制
print(b.T)
代码语言:javascript
复制
<xarray.DataArray (x: 4, y: 2)>
array([[  0,   0],
       [  1, 100],
       [  2, 200],
       [  3, 300]])
Coordinates:
  * y        (y) <U2 'y1' 'y2'
  * x        (x) int64 10 20 30 40
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档