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(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(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(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(anArray, f, depth, init, pad)
軸に沿って配列を集約します。
配列は整形式でなければいけません。
A.reduceAxis([[1, 2], [3, 4]], (accum, x) => accum + x, 0)
// -> [4, 6]
reduceDeep(anArray, f, depth, init)
配列を指定した深さで集約します。
深さdepthは省略できます。そのときは最も深い深さで集約します。
初期値initは省略できます。そのときは初期値として最初の要素が使用されます。
A.reduceDeep([[1, 2], [3, 4]], (accum, x) => accum + x, 100)
// -> [3, 7]
reduceAll(anArray, f, init)
すべての配列の要素について集約します。
A.reduceAll([[2, 3], [4, [5, 6], 7], 8, [9, 10]], (accum, x) => accum + x, 1)
// -> 55
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(array1, rotate, axis)
引数axisに与えられた軸に沿って回転します。
rotateはスカラー値または配列を指定できます。
A.rotateAxis([[1, 2], [3, 4], [5, 6]], [2, 1], 0)
// -> [[5, 4], [1, 6], [3, 2]]
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(anArray, depth)
指定された深さの配列まで反転します。
A.reverseDeep([[1, 2], [3, 4]], 100)
// -> [[2, 1], [4, 3]]
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]]
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(f, ...arrays)
配列とスカラー値scalarについて、配列の各々の値について最も深い深さでmapします。
a + x, [[1, 2], [3, 4]], [[5, 6], [7, 8]])
// -> [[6, 8], [10, 12]]
mapScalar(anObject, f, scalar, depth)
配列とスカラー値scalarについて、配列の各々の値についてmapします。
深さdepthは省略できます。そのときは最も深い深さで集約します。
A.mapScalar([[1, 2], [3, 4]], (a, x) => a + x, 3)
// -> [[4, 5], [6, 7]]
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(anArray, f, axis, init, depth)
指定された軸axisについて値を走査します。
A.scanAxis([1, 2, 3], (accum, x) => accum + x, 0)
// -> [1, 3, 6]
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(array1, array2)
配列をデコードします。
A.decode([2, 2, 2, 2], [1, 1, 1, 1])
// -> 15
encode(array1, array2)
配列をエンコードします。
A.encode([1760, 3, 12], 75)
// -> [2, 0, 3]
equalsDeep(...arrays)
与えられた配列が構造も含めて等しいか判定します。
A.equalsDeep([[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]])
// -> true
reshape(shape, anArray)
配列をベクトルshapeで表された次元になるようにします。
A.reshape([2, 3], [[1, 2], [3, 4]])
// -> [[1, 2, 3], [4, 1, 2]]
vectorize(anArray, depth)
指定した深さまで配列をベクトル化します。
A.vectorize([[1, 2], 3])
// -> [1, 2, 3]
isEmpty(anArray)
配列が一切の要素を持たないかを判定します。
A.isEmpty([[], [[], []], []])
// -> true
A.isEmpty([[], [[], [2]], []])
// -> false
first(anArray)
配列の最初の値を取得します。
A.first([[[1], 2, [3, 4]]])
// -> 1
rank(anObject)
配列の次元をベクトルで返します。
配列が整形式でないときはnullを返します。
A.rank([[1, 2, 3], [4, 5, 6]])
// -> [2, 3]
A.rank([1, [2, 3]])
// -> null
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(aVector)
sortIndex(aVector, (x, y) => x > y ? -1 : x < y ? 1 : 0)と同じです。
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]]
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(aVector, anArray)
配列anArrayで与えられた値をベクトルaVectorから探し出し、そのインデックスを構成する配列を返します。
A.indexOfArray([1, 2, 3], [[0, 1], [2, 3]])
// -> [[-1, 0], [1, 2]]
lastIndexOfArray(aVector, anArray)
配列anArrayで与えられた値をベクトルaVectorの後ろから探し出し、そのインデックスを構成する配列を返します。
A.lastIndexOfArray([1, 1, 0], [[0, 1], [2, 3]])
// -> [[2, 1], [-1, -1]]
generate(g, size)
sizeで与えられる長さ分の関数gを引数なしで呼び出した値で埋めたベクトルを返します。
A.generate(x => 1, 3)
// -> [1, 1, 1]
iterate(f, seed, size)
値seedから始まり、その値に順次関数fを適用した値を長さsize分で埋めたベクトルを返します。
A.iterate(x => x * 2, 1, 3)
// -> [1, 2, 4]
atArray(aVector, anArray)
配列anArrayで与えられたインデックスをベクトルaVectorから探し出し、その値を構成する配列を返します。
A.atArray([1, 2, 3], [[0, 1], [2, -1]])
// -> [[1, 2], [3, 3]]
member(anArray, dest)
配列anArrayの要素がdestに含まれているかを調べます。
A.member([[2, 8], [7, -1]], [[2], [[7]]])
// -> [[1, 0], [1, 0]]
sliceDeep(anArray, aVector)
配列の各次元を、 ベクトルの次元に対応する値でArray.prototype.sliceを実行することで与えられた配列を返します。
A.sliceDeep([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [1, -2])
// -> [[5, 6], [8, 9]]
take(anArray, aVector)
配列の各次元を、ベクトルの次元に対応する値の長さまで取った配列を返します。
負の値のときは後ろから取得します。
A.take([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [-2, 2])
// -> [[4, 5], [7, 8]]
drop(anArray, aVector)
配列の各次元を、ベクトルの次元に対応する値の長さで切り落とした配列を返します。
負の値のときは後ろから切り落とします。
A.drop([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [1, -1])
// -> [[4, 5], [7, 8]]
findArray(array, arraySearch, f)
配列arrayに配列arraySearchが含まれているかを調べます。
A.findArray("SUNDAY".split(""), "DAY".split(""))
// -> [0, 0, 0, 1, 0, 0]