Astropy: рд╕рдВрд░рдЪрд┐рдд dtype рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдЕрд╕рдВрдЧрдд/рднреНрд░рдорд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдордИ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: astropy/astropy

рд╡рд┐рд╡рд░рдг

рдлреЗрд╕рдмреБрдХ рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдЪрд░реНрдЪрд╛ рдиреЗ рд╕рд╛рдордиреЗ рд▓рд╛рдпрд╛ рдХрд┐ рдПрдХ рдореМрдЬреВрджрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдПрдХ рдирдИ, рдЦрд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ dtype :

>>> oldtable.dtype
dtype([('wavelength', '<f8'), ('flux', '<f4'), ('uncertainty', '<f4')])
>>> Table(dtype=oldtable.dtype)
<Table length=0>
wavelength   flux  uncertainty
 float64   float32   float32  
---------- ------- -----------

рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкреИрджрд▓ рдпрд╛рддреНрд░реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рднреА рдЙрддрдирд╛ рд╣реА рд╕рдВрднрд╡ рд╣реИ

>>> newtable = Table(names=oldtable.colnames, dtype=[dt for n, dt in oldtable.dtype.descr])

рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдкреБрд░рд╛рдиреЗ dtype рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрджрд┐ names рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ рддреЛ рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ:

 >>> newtable = Table(names=oldtable.colnames, dtype=oldtable.dtype)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/derek/lib/python3.8/site-packages/astropy/table/table.py", line 621, in __init__
    self._check_names_dtype(names, dtype, n_cols)
  File "/Users/derek/lib/python3.8/site-packages/astropy/table/table.py", line 873, in _check_names_dtype
    raise ValueError(f'{inp_str} must be a list or None')
ValueError: dtype must be a list or None

>>> newtable = Table(names=oldtable.colnames, dtype=oldtable.dtype.descr)
Traceback (most recent call last):
  File "/Users/derek/lib/python3.8/site-packages/astropy/table/table.py", line 1088, in _convert_data_to_col
    col = col_cls(name=name, data=data, dtype=dtype,
  File "/Users/derek/lib/python3.8/site-packages/astropy/table/column.py", line 879, in __new__
    self = super().__new__(
  File "/Users/derek/lib/python3.8/site-packages/astropy/table/column.py", line 254, in __new__
    if np.dtype(dtype).char == 'S':
TypeError: data type 'wavelength' not understood

рдРрд╕рд╛ рд╣реА рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм Table рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдРрд░реЗ рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░


Table рдХреЛ рдпрд╛ рддреЛ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ (рд╢рд╛рдпрдж рдЕрдзрд┐рдорд╛рдирддрдГ) рд╕рдВрд░рдЪрд┐рдд dtype рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдХрд┐ dtype.names рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ names рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░



рдКрдкрд░ рджреЗрдЦреЛред рдЬрдмрдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд┐рдзрд┐ newtable = oldtable[:0].copy() рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдФрд░ рдХрд┐рд╕реА рднреА unit рдЧреБрдгреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реИ), рдЕрдХреЗрд▓реЗ dtype рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рд╡рд┐рд╕рдВрдЧрддрд┐рдкреВрд░реНрдг рд╡реНрдпрд╡рд╣рд╛рд░, рдФрд░ рд╕рд╛рде рдореЗрдВ names рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдФрд░ рдЕрдкрд╡рд╛рдж рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред

https://github.com/astropy/astropy/blob/eeb9b7ac0e18b262fae64cd2fa46d0e1cff1e4d5/astropy/table/table.py#L592 -L594

рдХреЛрдИ рдЕрдиреНрдп names рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рди рд╣реЛрдиреЗ рдкрд░ dtype рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рдЕрдирдкреИрдХ" рдХрд░рддрд╛ рд╣реИ, рдФрд░ names рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди dtype.names рдЫреЛрдбрд╝рдХрд░, рдХреНрдпреЛрдВрдХрд┐ names рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП)ред

рдереЛрдбрд╝рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ рдкрд░, рддрд╛рд▓рд┐рдХрд╛ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рд╕рднреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдПрдХ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ units= рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдХреЛрдИ newtable = oldtable[:0].copy() рдкрджреНрдзрддрд┐ рдкрд░ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╛рдо рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдЖрдПрдЧрд╛ред

рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╡рд░рдг

рдПрд╕реНрдЯреНрд░реЛрдкреА рд╕рдВрд╕реНрдХрд░рдг 4.2.dev112+g595484597ред
рджрд┐рдирд╛рдВрдХ: 2020-05-22T19:44:39
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо: macOS-10.12.6-x86_64-i386-64bit
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп: /sw/bin/python3.8
рдкреВрд░реНрдг рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг:
3.8.3 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 14 рдордИ 2020, 22:17:35)
[рдХреНрд▓реИрдВрдЧ 9.0.0 (рдХреНрд▓реИрдВрдЧ-900.0.39.2)]

рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг:
рд╕реБрдиреНрди: 1.19.0rc1
рд╕рд┐рд╕рд┐рдкреА: 1.4.1
рдорд╛рдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм: 3.2.1
h5py: 2.9.0
рдкрд╛рдВрдбрд╛: рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ
рд╕рд╛рдЗрдерди: 0.29.16

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ oldtable рдХреНрдпрд╛ рдерд╛? рдХреНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

import numpy as np
from astropy.table import Table
arr = np.ones(2, dtype=np.dtype([('A', 'i'), ('B', 'f4'), ('C', 'f8')]))
tab1 = Table(arr)
tab1

tab2 = Table(dtype=tab1.dtype)
tab2

tab3 = Table(names=['X', 'Y', 'Z'], dtype=[dt for n, dt in tab1.dtype.descr])
tab3

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

<Table length=2>
  A      B       C   
int32 float32 float64
----- ------- -------
    1     1.0     1.0
    1     1.0     1.0

<Table length=0>
  A      B       C   
int32 float32 float64
----- ------- -------

<Table length=0>
  X      Y       Z   
int32 float32 float64
----- ------- -------

рдЬрдмрдХрд┐

>>> tab3 = Table(names=['X', 'Y', 'Z'], dtype=tab1.dtype)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 621, in __init__
    self._check_names_dtype(names, dtype, n_cols)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 873, in _check_names_dtype
    raise ValueError(f'{inp_str} must be a list or None')
ValueError: dtype must be a list or None
>>> tab3 = Table(names=['X', 'Y', 'Z'], dtype=tab1.dtype.descr)
Traceback (most recent call last):
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 1088, in _convert_data_to_col
    col = col_cls(name=name, data=data, dtype=dtype,
  File "/sw/lib/python3.8/site-packages/astropy/table/column.py", line 879, in __new__
    self = super().__new__(
  File "/sw/lib/python3.8/site-packages/astropy/table/column.py", line 254, in __new__
    if np.dtype(dtype).char == 'S':
TypeError: data type 'A' not understood

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 624, in __init__
    init_func(data, names, dtype, n_cols, copy)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 955, in _init_from_list
    col = self._convert_data_to_col(col, copy, default_name, dtype, name)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 1092, in _convert_data_to_col
    raise ValueError('unable to convert data to Column for Table')
ValueError: unable to convert data to Column for Table



md5-9116051d321cf97db138d26f38a78850



>>> tab3 = Table(arr, dtype=tab1.dtype.descr)
Traceback (most recent call last):
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 1088, in _convert_data_to_col
    col = col_cls(name=name, data=data, dtype=dtype,
  File "/sw/lib/python3.8/site-packages/astropy/table/column.py", line 879, in __new__
    self = super().__new__(
  File "/sw/lib/python3.8/site-packages/astropy/table/column.py", line 254, in __new__
    if np.dtype(dtype).char == 'S':
TypeError: data type 'A' not understood

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 624, in __init__
    init_func(data, names, dtype, n_cols, copy)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 1108, in _init_from_ndarray
    self._init_from_list(cols, names, dtype, n_cols, copy)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 955, in _init_from_list
    col = self._convert_data_to_col(col, copy, default_name, dtype, name)
  File "/sw/lib/python3.8/site-packages/astropy/table/table.py", line 1092, in _convert_data_to_col
    raise ValueError('unable to convert data to Column for Table')
ValueError: unable to convert data to Column for Table

#10419 рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

pllim picture pllim  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bmorris3 picture bmorris3  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

funbaker picture funbaker  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

emilydeibert picture emilydeibert  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sergiopasra picture sergiopasra  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ