code: def save_embeddings(
      path: str,
      embeddings: NDArray[np.float64],
      labels: List[int],
      filenames: List[str],
  ) -> None:
      """Saves embeddings in a csv file in a Lightly compatible format.
  
      Creates a csv file at the location specified by path and saves embeddings,
      labels, and filenames.
  
      Args:
          path:
              Path to the csv file.
          embeddings:
              Embeddings of the images as a numpy array (n x d).
          labels:
              List of integer labels.
          filenames:
              List of filenames.
  
      Raises:
          ValueError: If embeddings, labels, and filenames have different lengths.
  
      Examples:
          >>> import lightly.utils.io as io
          >>> io.save_embeddings(
          >>>     'path/to/my/embeddings.csv',
          >>>     embeddings,
          >>>     labels,
          >>>     filenames)
      """
  
      n_embeddings = len(embeddings)
      n_filenames = len(filenames)
      n_labels = len(labels)
  
      if n_embeddings != n_labels or n_filenames != n_labels:
          msg = "Length of embeddings, labels, and filenames should be equal "
          msg += f" but are not: ({n_embeddings}, {n_filenames}, {n_labels})"
          raise ValueError(msg)
  
      header = ["filenames"]
      header = header + [
          f"embedding_{i}" for i in range(embeddings.shape[-1])
      ]
      header = header + ["labels"]
      with open(path, "w", newline="") as csv_file:
          writer = csv.writer(csv_file, delimiter=",")
          writer.writerow(header)
          for filename, embedding, label in zip(
              filenames, embeddings, labels
          ):
              writer.writerow(
                  [filename] + list(embedding) + [str(label)]
              )
  
file_path: lightly/lightly/utils/io.py
imports: import csv
  import json
  import re
  from itertools import compress
  from typing import Any, Dict, List, Tuple, Union
  import numpy
  from numpy.typing import NDArray
label_desc: Use image node_id 2 for calling a global function with example usage: save_embeddings(path, embeddings, labels, filenames) without return types