1.3.3.2 结构化的数据类型

名称类型
sensor_code(4个字母的字符)
position(浮点)
value(浮点)

In [194]:

  1. samples = np.zeros((6,), dtype=[('sensor_code', 'S4'),('position', float), ('value', float)])
  2. samples.ndim

Out[194]:

  1. 1

In [195]:

  1. samples.shape

Out[195]:

  1. (6,)

In [196]:

  1. samples.dtype.names

Out[196]:

  1. ('sensor_code', 'position', 'value')

In [198]:

  1. samples[:] = [('ALFA', 1, 0.37), ('BETA', 1, 0.11), ('TAU', 1, 0.13),('ALFA', 1.5, 0.37), ('ALFA', 3, 0.11),
  2. ('TAU', 1.2, 0.13)]
  3. samples

Out[198]:

  1. array([('ALFA', 1.0, 0.37), ('BETA', 1.0, 0.11), ('TAU', 1.0, 0.13),
  2. ('ALFA', 1.5, 0.37), ('ALFA', 3.0, 0.11), ('TAU', 1.2, 0.13)],
  3. dtype=[('sensor_code', 'S4'), ('position', '<f8'), ('value', '<f8')])

用字段名称索引也可以访问字段:

In [199]:

  1. samples['sensor_code']

Out[199]:

  1. array(['ALFA', 'BETA', 'TAU', 'ALFA', 'ALFA', 'TAU'],
  2. dtype='|S4')

In [200]:

  1. samples['value']

Out[200]:

  1. array([ 0.37, 0.11, 0.13, 0.37, 0.11, 0.13])

In [201]:

  1. samples[0]

Out[201]:

  1. ('ALFA', 1.0, 0.37)

In [202]:

  1. samples[0]['sensor_code'] = 'TAU'
  2. samples[0]

Out[202]:

  1. ('TAU', 1.0, 0.37)

一次多个字段:

In [203]:

  1. samples[['position', 'value']]

Out[203]:

  1. array([(1.0, 0.37), (1.0, 0.11), (1.0, 0.13), (1.5, 0.37), (3.0, 0.11),
  2. (1.2, 0.13)],
  3. dtype=[('position', '<f8'), ('value', '<f8')])

和普通情况一样,象征索引也有效:

In [204]:

  1. samples[samples['sensor_code'] == 'ALFA']

Out[204]:

  1. array([('ALFA', 1.5, 0.37), ('ALFA', 3.0, 0.11)],
  2. dtype=[('sensor_code', 'S4'), ('position', '<f8'), ('value', '<f8')])

:构建结构化数组有需要其他的语言,见这里这里