class_docstr: Persist ndarrays in an object by saving them to a zip file.
  
  :param zip_file: A zip file handle that the NumPy arrays will be saved to.
  :type zip_file: :class:`zipfile.ZipFile`
  
  
  .. note:
      The convention for persistent ids given by this class and its derived
      classes is that the name should take the form `type.name` where `type`
      can be used by the persistent loader to determine how to load the
      object, while `name` is human-readable and as descriptive as possible.
code: def __call__(self, obj):
      if type(obj) is np.ndarray:
          if id(obj) not in self.seen:
  
              def write_array(f):
                  np.lib.format.write_array(f, obj)
  
              name = self._resolve_name(obj)
              zipadd(write_array, self.zip_file, name)
              self.seen[id(obj)] = "ndarray.{0}".format(name)
          return self.seen[id(obj)]
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import os
  import pickle
  import sys
  import tempfile
  import zipfile
  import warnings
  from collections import defaultdict
  from contextlib import closing
  from pickle import HIGHEST_PROTOCOL
  from six import BytesIO
  import theano
  from theano import config
  from theano.compat import PY3
  from six import string_types
  from theano.compile.sharedvalue import SharedVariable
label_desc: Use image node_id 3 for calling the PersistentNdarrayID obj's underlying member method code with example usage: obj.__call__(obj) and returns: self