jnp.ndarray 是 JAX 中的多维数组数据类型,其接口与 NumPy 中的 numpy.ndarray 类型非常相似。
import jax.numpy as jnp
import jax
print(jnp.ndarray) #
print(jnp.array) #
## 1.1 从 Python 列表创建
# 一维数组
arr1 = jnp.array([1, 2, 3])
# 二维数组
arr2 = jnp.array([[1, 2, 3], [4, 5, 6]])
# 三维数组
arr3 = jnp.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
## 1.2 创建特定值数组
# 创建一个形状为 (3, 3) 的数组,元素都是 0
zeros_array = jnp.zeros((3, 3))
# 创建一个形状为 (2, 2) 的数组,元素都是 1
ones_array = jnp.ones((2, 2))
# 创建一个形状为 (3, 3) 的数组,元素都是指定的值 5
constant_array = jnp.full((3, 3), 5)
## 1.3 创建随机数组
# 在较新版本的 JAX 中,随机数生成模块已经从 jnp 模块中分离出来,成为一个独立的 jax.random 模块。
# 生成形状为 (2, 3) 的标准正态分布随机数组
key = jax.random.PRNGKey(42)
random_normal_array = jax.random.normal(key, shape=(2, 3))
# 生成形状为 (3, 3) 的在 [0, 1) 范围内均匀分布的随机数组
key = jax.random.PRNGKey(42)
random_uniform_array = jax.random.uniform(key, shape=(3, 3))
## 1.4 使用序列生成数组:
# 创建一个从 0 到 4 步长为 1 的数组
seq_array = jnp.arange(5)
# 创建一个从 0 到 1 之间等间距的 5 个元素的数组
linspace_array = jnp.linspace(0, 1, 5)
#print(linspace_array)
arr = jnp.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]])
## 2.1 shape: 返回数组的维度信息,即各个轴的长度。
shape = arr.shape
## 2.2 dtype: 返回数组中元素的数据类型。
dtype = arr.dtype
## 2.3 size: 返回数组中元素的总数。
size = arr.size
## 2. 4 ndim: 返回数组的维度数。
ndim = arr.ndim
数学操作:
jnp.add
, jnp.subtract
, jnp.multiply
, jnp.divide
: 加法、减法、乘法、除法。jnp.sum
, jnp.mean
, jnp.max
, jnp.min
: 求和、均值、最大值、最小值。数组操作:
jnp.reshape(new_shape)
: 返回具有新形状的数组。jnp.transpose(axes)
: 返回轴重新排列的数组。jnp.concatenate(arrays, axis)
: 沿指定轴连接数组。逻辑操作:
jnp.logical_and
, jnp.logical_or
, jnp.logical_not
: 逻辑与、逻辑或、逻辑非。线性代数:
jnp.dot(a, b)
: 点积。jnp.linalg.norm(x)
: 范数。索引和切片:
arr[index]
: 获取索引处的元素。arr[start:stop:step]
: 对数组进行切片。其他:
jnp.where(condition, x, y)
: 根据条件返回元素。jnp.concatenate(arrays, axis)
: 沿指定轴连接数组。jnp.argmax(arr)
, jnp.argmin(arr)
: 最大值和最小值的索引。参考:
https://jax.readthedocs.io/en/latest/jax.numpy.html