Как использовать np.column_stack, чтобы сжать 4 вектора с разным размером столбца (одинаковыми размерами строки) в переменную Python? - PullRequest
0 голосов
/ 24 февраля 2020

Я учусь Python. В моих исследованиях есть четыре вектора: r (4500x1), Гкал c (4500x47), Гобс (4500x1), dg (4500x1). В скобках первое число обозначает количество экземпляров или строк, а второе число обозначает количество переменных или столбцов класса.

>>> len(r)
4500
>>> len(gcalc)
47
>>> len(gcalc['total'])
4500
>>> len(gobs)
4500
>>> len(dg)
4500

Я надеюсь сжать их в вектор, чтобы сохранить этот вектор в файле. Ниже приведены мои сценарии.

import numpy as np
fpath = "./refined_pdf_data.dat"
A = np.column_stack((r, gcalc, gobs, dg))  ##I referred this [link][1], but not work
np.savetxt(fpath, A, header='r[A], Gcalc, Gobs, dG', fmt='%.6f')

, где r, gobs и dg - типы с плавающей запятой, а gcal c - словарь, а его значение - типы с плавающей запятой.

Когда я запускал эти сценарии, я получил сообщения об ошибках, показанные ниже.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in column_stack
  File "/user/environment/.../fullrmc4.1/lib/python3.8/site-packages/numpy/lib/shape_base.py", line 656, in column_stack
    return _nx.concatenate(arrays, 1)
  File "<__array_function__ internals>", line 5, in concatenate
ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 4500 and the array at index 1 has size 1

Как я могу исправить эту проблему? Любое дальнейшее предложение будет высоко оценено. Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2020

Из вашей ошибки

ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 4500 and the array at index 1 has size 1

значение по индексу 1 равно gcalc, которое является не массивом, а словарем с ключами 47.

Я не уверен , какое значение ключа вы хотите записать в файл, поэтому при записи всех данных в словаре gcalc

keys = list(gcalcs.keys())
A = np.column_stack((r, *[gcalc[k] for k in keys], gobs, dg))
# A = np.column_stack((r, gcalc['total'], gobs, dg))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...