#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») не имеют одинаковой формы, вы не можете ожидать, что массивы будут суммированы. Я думаю, что ошибка заключается в построении ваших «более сложных» массивов данных. Какую ценность вы ожидаете в конце ?