anchor.diff:  p
       |  Vectors data is kept in the #[code Vectors.data] attribute, which should
       |  be an instance of #[code numpy.ndarray] (for CPU vectors) or
  -    |  #[code cupy.ndarray] (for GPU vectors).
  +    |  #[code cupy.ndarray] (for GPU vectors). Multiple keys can be mapped to
  +    |  the same vector, and not all of the rows in the table need to be
  +    |  assigned – so #[code vectors.n_keys] may be greater or smaller than
  +    |  #[code vectors.shape[0]].
   
   +h(2, "init") Vectors.__init__
       +tag method
   
   p
  -    |  Create a new vector store. To keep the vector table empty, pass
  -    |  #[code width=0]. You can also create the vector table and add
  -    |  vectors one by one, or set the vector values directly on initialisation.
  +    |  Create a new vector store. You can set the vector values and keys
  +    |  directly on initialisation, or supply a #[code shape] keyword argument
  +    |  to create an empty table you can add vectors to later.
   
   +aside-code("Example").
       from spacy.vectors import Vectors
  -    from spacy.strings import StringStore
  -
  -    empty_vectors = Vectors(StringStore())
  -
  -    vectors = Vectors([u'cat'], width=300)
  -    vectors[u'cat'] = numpy.random.uniform(-1, 1, (300,))
  -
  -    vector_table = numpy.zeros((3, 300), dtype='f')
  -    vectors = Vectors(StringStore(), data=vector_table)
  -
  -+table(["Name", "Type", "Description"])
  -    +row
  -        +cell #[code strings]
  -        +cell #[code StringStore] or list
  -        +cell
  -            |  List of strings, or a #[+api("stringstore") #[code StringStore]]
  -            |  that maps strings to hash values, and vice versa.
  -
  -    +row
  -        +cell #[code width]
  -        +cell int
  -        +cell Number of dimensions.
  -
  +
  +    empty_vectors = Vectors(shape=(10000, 300))
  +
  +    data = numpy.zeros((3, 300), dtype='f')
  +    keys = [u'cat', u'dog', u'rat']
  +    vectors = Vectors(data=data, keys=keys)
  +
  ++table(["Name", "Type", "Description"])
       +row
           +cell #[code data]
  -        +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
  +        +cell #[code.u-break ndarray[ndim=1, dtype='float32']]
           +cell The vector data.
  +
  +    +row
  +        +cell #[code keys]
  +        +cell iterable
  +        +cell A sequence of keys aligned with the data.
  +
  +    +row
  +        +cell #[code shape]
  +        +cell tuple
  +        +cell
  +            |  Size of the table as #[code (n_entries, n_columns)], the number
  +            |  of entries and number of columns. Not required if you're
  +            |  initialising the object with #[code data] and #[code keys].
   
       +row("foot")
           +cell returns
  
positive.code:         +cell returns
          +cell tuple
          +cell A #[code (rows, dims)] pair.
  
  +h(2, "from_glove") Vectors.from_glove
      +tag method
  
negative.code:     |  dimensions in the vector table.
  
  +aside-code("Example").
      vectors = Vectors(shape(1, 300))
      vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
      rows, dims = vectors.shape
      assert rows == 1
  