Вы создали 1d структурированный массив (с составным dtype
):
In [717]: data = np.array([(b'M', 119., 76.), (b'M', 114., 73.), (b'F', 124.,
...: 79.)],
...: dtype=[('gender', 'S1'), ('bps', '<f8'), ('bpd', '<f8')])
In [718]:
In [718]: data.shape
Out[718]: (3,)
In [719]: data.dtype.fields
Out[719]:
mappingproxy({'gender': (dtype('S1'), 0),
'bps': (dtype('float64'), 1),
'bpd': (dtype('float64'), 9)})
fields
доступны по имени, а не по номеру столбца:
In [720]: data['gender']
Out[720]: array([b'M', b'M', b'F'], dtype='|S1')
И элемент этого массива:
In [721]: data[0]
Out[721]: (b'M', 119., 76.)
In [722]: type(_)
Out[722]: numpy.void
Мы называем это record
, но оно отображает (и индексирует) как кортеж. Обратите внимание, что ваше выражение создания использует список кортежей.
Один из способов распаковки массива - это перебирать имена полей:
In [734]: data.dtype.names
Out[734]: ('gender', 'bps', 'bpd')
In [735]: a,b,c = [data[name] for name in data.dtype.names]
In [736]: a
Out[736]: array([b'M', b'M', b'F'], dtype='|S1')
In [737]: b
Out[737]: array([119., 114., 124.])
In [738]: c
Out[738]: array([76., 73., 79.])