inner

inner(array1, array2, f, g, initf, initg, depthf, depthg)

2つの配列の内積をとります。
配列は整形式でなければいけません。
初期値initf, initgは省略できます。そのときは初期値として最初の要素が使用されます。
配列の深さdepthf, depthgは省略できます。そのときは深さが無限になります。

A.inner([[1, 2], [3, 4]], [[5, 6], [7, 8]], (accum, x) => accum + x, (accum, x) => accum * x))
// -> [[19, 22], [43, 50]]

outer

outer(array1, array2, f, depth)

2つの配列の外積をとります。
深さdepthは省略できます。そのときは最も深い要素まで計算します。

A.outer([1, 2, 3, 4, 5], [1, 2, 3, 4, 5], (x, y) => x * y)
// -> [[1, 2, 3, 4, 5],
//     [2, 4, 6, 8, 10],
//     [3, 6, 9, 12, 15],
//     [4, 8, 12, 16, 20],
//     [5, 10, 15, 20, 25]]

T

T(anArray)

配列の転置をとります。
配列は整形式でなければいけません。

A.T([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [2, 3, 4]]])
// -> [[[1, 7], [4, 2]], [[2, 8], [5, 3]], [[3, 9], [6, 4]]]

transpose

transpose(anArray, ...axes)

軸を引数axesに与えられたように入れ替えます。
軸を重複させて指定することもできます。そのときは軸の対角要素が取得されます。 配列は整形式でなければいけません。

A.transpose([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [2, 3, 4]]], 1, 2, 0)
// -> [[[1, 7], [2, 8], [3, 9]], [[4, 2], [5, 3], [6, 4]]]

reduceAxis

reduceAxis(anArray, f, depth, init, pad)

軸に沿って配列を集約します。
配列は整形式でなければいけません。

A.reduceAxis([[1, 2], [3, 4]], (accum, x) => accum + x, 0)
// -> [4, 6]

reduceDeep

reduceDeep(anArray, f, depth, init)

配列を指定した深さで集約します。
深さdepthは省略できます。そのときは最も深い深さで集約します。
初期値initは省略できます。そのときは初期値として最初の要素が使用されます。

A.reduceDeep([[1, 2], [3, 4]], (accum, x) => accum + x, 100)
// -> [3, 7]

reduceAll

reduceAll(anArray, f, init)

すべての配列の要素について集約します。

A.reduceAll([[2, 3], [4, [5, 6], 7], 8, [9, 10]], (accum, x) => accum + x, 1)
// -> 55

reverseAxis

reverseAxis(array1, ...axes)

引数axesに与えられた軸に沿って反転します。

A.reverseAxis([[[1, 2], [3, 4], [1, 2]], [[3, 4], [1, 2], [3, 4]]], 0, 2)
// -> [[[4, 3], [2, 1], [4, 3]], [[2, 1], [4, 3], [2, 1]]]

rotateAxis

rotateAxis(array1, rotate, axis)

引数axisに与えられた軸に沿って回転します。
rotateはスカラー値または配列を指定できます。

A.rotateAxis([[1, 2], [3, 4], [5, 6]], [2, 1], 0)
// -> [[5, 4], [1, 6], [3, 2]]

shiftAxis

shiftAxis(array1, shift, axis, pad)

引数axisに与えられた軸に沿ってシフトします。
shiftはスカラー値または配列を指定できます。

A.shiftAxis([[1, 2, 3], [4, 5, 6]], [2, 1], 1, 0)
// -> [[3, 0, 0], [5, 6, 0]]

reverseDeep

reverseDeep(anArray, depth)

指定された深さの配列まで反転します。

A.reverseDeep([[1, 2], [3, 4]], 100)
// -> [[2, 1], [4, 3]]

concatAxis

concatAxis(axis, ...arrays)

配列を指定した軸について連結します。
軸axisが小数のときは、floor(axis)とceil(axis)の間の層に連結され、階数が1つ増えます。
axisが負の数のときは最初の軸に連結され、階数が1つ増えます。

A.concatAxis(1, [[1, 2], [3, 4]], [[5, 6, 7], [8, 9, 0]])
// -> [[1, 2, 5, 6, 7], [3, 4, 8, 9, 0]]
A.concatAxis(0.5, [[1, 2], [3, 4]], [[5, 6], [8, 9]])
// -> [[[1, 2], [5, 6]], [[3, 4], [8, 9]]]
A.concatAxis(-0.5, [1, 2, 3], [4, 5, 6])
// -> [[1, 2, 3], [4, 5, 6]]

mapDeep

function mapDeep(f, depth, ...arrays)

配列を指定した深さでmapします。
深さdepthは省略できません。最も深い深さで集約するときは十分大きい数を指定します。
NumPyのようにブロードキャストもできますが、階数が違うときはエラーになります。 そのときは階数を合わせるようにしてください。

A.mapDeep((accum, x) => accum + x, 100, [[1, 2], [3, 4]], [[5, 6], [7, 8]])
// -> [[6, 8], [10, 12]]
A.mapDeep((accum, x) => accum + x, 100, [[1, 2]], [[3], [4]])
// -> [[4, 5], [5, 6]]

map

map(f, ...arrays)

配列とスカラー値scalarについて、配列の各々の値について最も深い深さでmapします。

 a + x, [[1, 2], [3, 4]], [[5, 6], [7, 8]])
// -> [[6, 8], [10, 12]]

mapScalar

mapScalar(anObject, f, scalar, depth)

配列とスカラー値scalarについて、配列の各々の値についてmapします。
深さdepthは省略できます。そのときは最も深い深さで集約します。

A.mapScalar([[1, 2], [3, 4]], (a, x) => a + x, 3)
// -> [[4, 5], [6, 7]]

replicateAxis

replicateAxis(array1, vector, axis, pad)

指定された軸axisについてその軸に沿った値を複製または削除します。

A.replicateAxis([[1, 2, 3], [4, 5, 6]], [0, 2, 1], 1)
// -> [[2, 2, 3], [5, 5, 6]]

scanAxis

scanAxis(anArray, f, axis, init, depth)

指定された軸axisについて値を走査します。

A.scanAxis([1, 2, 3], (accum, x) => accum + x, 0)
// -> [1, 3, 6]

scanAxisLast

scanAxisLast(anArray, f, init, depth)

最終軸について値を走査します。

A.scanAxisLast([[1, 2, 3], [4, 5, 6], [7, 8, 9]], (accum, x) => accum - x, 0)
// -> [[2, 1, 0], [3, 3, 3], [7, 8, 9]]

decode

decode(array1, array2)

配列をデコードします。

A.decode([2, 2, 2, 2], [1, 1, 1, 1])
// -> 15

encode

encode(array1, array2)

配列をエンコードします。

A.encode([1760, 3, 12], 75)
// -> [2, 0, 3]

equalsDeep

equalsDeep(...arrays)

与えられた配列が構造も含めて等しいか判定します。

A.equalsDeep([[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]])
// -> true

reshape

reshape(shape, anArray)

配列をベクトルshapeで表された次元になるようにします。

A.reshape([2, 3], [[1, 2], [3, 4]])
// -> [[1, 2, 3], [4, 1, 2]]

vectorize

vectorize(anArray, depth)

指定した深さまで配列をベクトル化します。

A.vectorize([[1, 2], 3])
// -> [1, 2, 3]

isEmpty

isEmpty(anArray)

配列が一切の要素を持たないかを判定します。

A.isEmpty([[], [[], []], []])
// -> true
A.isEmpty([[], [[], [2]], []])
// -> false

first

first(anArray)

配列の最初の値を取得します。

A.first([[[1], 2, [3, 4]]])
// -> 1

rank

rank(anObject)

配列の次元をベクトルで返します。
配列が整形式でないときはnullを返します。

A.rank([[1, 2, 3], [4, 5, 6]])
// -> [2, 3]
A.rank([1, [2, 3]])
// -> null

sortIndex

sortIndex(aVector, cmp)

ベクトルを並び替え、そこにあるべき要素のインデックスのベクトルを返します。
比較関数cmpは省略可能です。そのときは(x, y) => x < y ? -1 : x > y ? 1 : 0が使用されます。

A.sortIndex([30, 50, 10, 90, 70])
// -> [2, 0, 1, 4, 3]

sortIndexDesc

sortIndexDesc(aVector)

sortIndex(aVector, (x, y) => x > y ? -1 : x < y ? 1 : 0)と同じです。

subarray

subarray(anArray, indices)

ベクトルindicesで指定される部分配列を返します。
indicesには、null、整数、整数の配列、関数を指定できます。
nullのときはその次元のすべての値を取得します。
整数のときはそのインデックスに対応する値を取得します。 整数を指定したときには階数が1つ少なくなります。
整数の配列のときはそれぞれのインデックスに対応する値を取得します。
関数のときは条件に従った値を取得します。条件に1つしか当てはまらないときでも階数は減りません。

A.subarray([[1, 2], [3, 4]], [null, 0])
// -> [1, 3]
A.subarray([[1, 2, 3], [4, 5, 6]], [(x, index) => index > 0, [1, 2]])
// -> [[5, 6]]

set

subarray(anArray, indices, rvalue, depth)

ベクトルindicesで指定される部分配列にrvalueで指定された値を代入します。
indicesには、null、整数、整数の配列、関数を指定できます。
nullのときはその次元のすべての値を取得します。
整数のときはそのインデックスに対応する値を取得します。 整数を指定したときには階数が1つ少なくなります。
整数の配列のときはそれぞれのインデックスに対応する値を取得します。
関数のときは条件に従った値を取得します。条件に1つしか当てはまらないときでも階数は減りません。

A.set(x, [0, null], [9, 8, 7])
// -> [[1, 2, 3], [4, 5, 6]], [[9, 8, 7], [4, 5, 6]]

indexOfArray

indexOfArray(aVector, anArray)

配列anArrayで与えられた値をベクトルaVectorから探し出し、そのインデックスを構成する配列を返します。

A.indexOfArray([1, 2, 3], [[0, 1], [2, 3]])
// -> [[-1, 0], [1, 2]]

lastIndexOfArray

lastIndexOfArray(aVector, anArray)

配列anArrayで与えられた値をベクトルaVectorの後ろから探し出し、そのインデックスを構成する配列を返します。

A.lastIndexOfArray([1, 1, 0], [[0, 1], [2, 3]])
// -> [[2, 1], [-1, -1]]

generate

generate(g, size)

sizeで与えられる長さ分の関数gを引数なしで呼び出した値で埋めたベクトルを返します。

A.generate(x => 1, 3)
// -> [1, 1, 1]

iterate

iterate(f, seed, size)

値seedから始まり、その値に順次関数fを適用した値を長さsize分で埋めたベクトルを返します。

A.iterate(x => x * 2, 1, 3)
// -> [1, 2, 4]

atArray

atArray(aVector, anArray)

配列anArrayで与えられたインデックスをベクトルaVectorから探し出し、その値を構成する配列を返します。

A.atArray([1, 2, 3], [[0, 1], [2, -1]])
// -> [[1, 2], [3, 3]]

member

member(anArray, dest)

配列anArrayの要素がdestに含まれているかを調べます。

A.member([[2, 8], [7, -1]], [[2], [[7]]])
// -> [[1, 0], [1, 0]]

sliceDeep

sliceDeep(anArray, aVector)

配列の各次元を、 ベクトルの次元に対応する値でArray.prototype.sliceを実行することで与えられた配列を返します。

A.sliceDeep([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [1, -2])
// -> [[5, 6], [8, 9]]

take

take(anArray, aVector)

配列の各次元を、ベクトルの次元に対応する値の長さまで取った配列を返します。
負の値のときは後ろから取得します。

A.take([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [-2, 2])
// -> [[4, 5], [7, 8]]

drop

drop(anArray, aVector)

配列の各次元を、ベクトルの次元に対応する値の長さで切り落とした配列を返します。
負の値のときは後ろから切り落とします。

A.drop([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [1, -1])
// -> [[4, 5], [7, 8]]

findArray

findArray(array, arraySearch, f)

配列arrayに配列arraySearchが含まれているかを調べます。

A.findArray("SUNDAY".split(""), "DAY".split(""))
// -> [0, 0, 0, 1, 0, 0]