Skip to content

mullerhai/storch-numpy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Storch-Numpy: A Scala 3 Implementation of NumPy

Overview

Storch-Numpy is a NumPy-like library implemented in Scala 3. It enables seamless interoperability with Python's NumPy, allowing users to read from and write to .npy and .npz files across both environments. The library supports common NumPy operations and is poised to expand with more features in the future.

Key Features

  • File I/O: Read and write .npy and .npz files, ensuring compatibility with files generated by Python's NumPy.
  • Data Type Support: Support for a wide range of data types, including bool, uint8, int16, float32, and more.
  • Array Operations: Implementation of common NumPy array operations such as broadcasting and transposing.

Quick Start

Prerequisites

  • Scala 3: This project is developed using Scala 3. We recommend version 3.6.4.
  • SBT: The project build tool. Version 1.10.7 is recommended.

Project Dependencies

libraryDependencies += "io.github.mullerhai" % "storch-numpy_3" % "0.1.0"

The necessary dependencies are already included in build.sbt:

import torch.numpy.serve.Numpy
import java.nio.file.Paths

// Read a .npy file
def float64NpyFile(
    path: String =
      "D:\\data\\git\\storch-numpy\\src\\main\\scala\\com\\github\\dreamolight\\jnpy\\random_float64_array.npy"
): Unit = {
  val np = new Numpy(path)
  val data = np.float64Elements.toSeq
  data.foreach(d => print(s"$d \t"))
}

// Save a .npy file
val data = Array(1.0, 2.0, 3.0)
val shape = Array(3)
val dataType = torch.numpy.enums.DType.Float64
val endian = torch.numpy.enums.Endian.Little
val isFortranOrder = false
val savePath = "new_random_float64_array.npy"
Numpy.saveToNumpyFile(savePath, data, shape, dataType, endian, isFortranOrder)
import java.nio.file.Paths
import scala.util.Using
import torch.numpy.extern.NpzFile

// Write to a .npz file
val booleanArray = Array(true, false, true)
val npzFilePath = Paths.get("example.npz")
Using.resource(NpzFile.write(npzFilePath)) { writer =>
  writer.write("boolean_array", booleanArray, Array(1, 3))
  println("all write finish .... \r\n ")
}

// Read from a .npz file
Using.resource(NpzFile.read(Paths.get("example.npz"))) { reader =>
  val readBooleanArray = reader("boolean_array").asBooleanArray()
  println(readBooleanArray.mkString(","))
}

About

Pure Numpy ON Scala3

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published