Xarray добавляет (как в сумме) две строки в одном измерении, но с разным значением координаты

#python #add #python-xarray

Вопрос:

Я использовал xarray для создания двух разных массивов данных с одинаковыми размерами и координатами. Однако я хочу добавить две разные координаты в одно из этих измерений. Я пытаюсь добавить координату «a» к координате «b» в измерении «x». Существует простой обходной путь, если это единственные размеры моей матрицы, но более сложный, если у меня больше измерений, и я хочу сохранить нормальное поведение xarray для других измерений. Пожалуйста, ознакомьтесь с приведенным ниже примером, в котором произошел сбой в последней строке. Я знаю, как вручную исправить это в numpy, но прелесть xarray в том, что мне не нужно этого делать.

Позволяет ли xarray простое решение для такого рода операций?

 
import xarray as xr
import numpy as np

# create simple DataArray M and N to show what I would like to do
M = xr.DataArray([1, 2], dims="x",coords={'x':['a','b']})
N = xr.DataArray([3, 4], dims="x",coords={'x':['a','b']})

print(M.sel(x='a') N.sel(x='b'))  # this will NOT give me the value 
print(M.sel(x='a').values N.sel(x='b').values) # this will give me the value


# create a more complex DataArray M and N to show what the challenge
m = np.arange(3*2*4)
m = m.reshape(3,2,4)
n = np.arange(4*2*3)
n = n.reshape(4,2,3)
M = xr.DataArray(m, dims=['z1',"x","z2"],coords={'x':['a','b']})
N = xr.DataArray(n, dims=["z2",'x','z1'],coords={'x':['a','b']})

print(M.sel(x='a') N.sel(x='b'))  # this will NOT give me the value 
print(M.sel(x='a').values N.sel(x='b').values) # this will result in an error

 

Комментарии:

1. Вы прочитали сообщение об ошибке в последней строке? Вы пытаетесь сложить два массива разной формы вместе (3,4) против (4,3). Если вы перенесете, это сработает: print(M.sel(x='a').values N.sel(x='b').values.T)

2. Во всяком случае, я не думаю, что ты поступаешь правильно. Весь смысл координат в том, чтобы выяснить, какие значения следует добавлять-точки с разными координатами не являются одними и теми же точками: в этом весь смысл Xarray! Давайте сделаем шаг назад: с какими данными вы работаете, чего вы пытаетесь достичь?

3. @HuiteBootsma. Я понял сообщение об ошибке. Я на самом деле создал массивы таким образом, чтобы создать эту ошибку, чтобы показать, что мое решение работает для простых массивов, но не для более сложных.

4. @HuiteBootsma. Я также понимаю, что это не одни и те же пункты, но в моем случае имеет смысл их добавить. У меня есть матрица, которая содержит 6 степеней свободы в движении, скорости и ускорении тела. Я хочу рассчитать кажущееся ускорение по ax_apparent = ax sin(roty)*гравитации. В котором ax-ускорение в направлении x, а rty-вращение тела по оси y. Гравитация работает в Z-реж.

5. @HuiteBootsma прав : если ваши подмножества (т. е. M. sel(x=»a») и N. sel(x=»b») не имеют одинаковой формы, вы не можете ожидать, что массивы будут суммированы. Я думаю, что ошибка заключается в построении ваших «более сложных» массивов данных. Какую ценность вы ожидаете в конце ?