mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-25 15:07:57 +00:00
Implemented method squeeze
This commit is contained in:
parent
b07920fac8
commit
5ea8366d3e
@ -7,7 +7,7 @@ https://github.com/josdejong/mathjs
|
||||
*Note: version 0.5 is incompatible with previous versions.*
|
||||
|
||||
- Implemented data types Matrix and Range.
|
||||
- Implemented methods clone, size, identity.
|
||||
- Implemented methods clone, diag, size, squeeze, identity.
|
||||
- Changed: moved all type constructors in the namespace under math.type,
|
||||
created construction methods for easy object creation. For example, a complex
|
||||
value is now created with "math.complex(2, 3)" instead of
|
||||
|
||||
75
math.js
75
math.js
@ -4834,7 +4834,7 @@ diag.doc = {
|
||||
'diag(a)'
|
||||
],
|
||||
'seealso': [
|
||||
'identity', 'ones', 'range', 'size', 'transpose', 'zeros'
|
||||
'identity', 'ones', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
/**
|
||||
@ -4903,7 +4903,7 @@ identity.doc = {
|
||||
'identity(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'ones', 'range', 'size', 'transpose', 'zeros'
|
||||
'diag', 'ones', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
/**
|
||||
@ -4958,7 +4958,7 @@ ones.doc = {
|
||||
'ones(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'range', 'size', 'transpose', 'zeros'
|
||||
'diag', 'identity', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
/**
|
||||
@ -5014,6 +5014,73 @@ size.doc = {
|
||||
'size(a)',
|
||||
'size(1:6)'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
/**
|
||||
* Remove singleton dimensions from a matrix. squeeze(x)
|
||||
* @param {Matrix | Array} x
|
||||
* @return {Matrix | Array} res
|
||||
*/
|
||||
function squeeze (x) {
|
||||
if (arguments.length != 1) {
|
||||
throw newArgumentsError('squeeze', arguments.length, 1);
|
||||
}
|
||||
|
||||
if (x instanceof Matrix || x instanceof Range) {
|
||||
return _squeezeArray(x.toArray());
|
||||
}
|
||||
else if (x instanceof Array) {
|
||||
return _squeezeArray(clone(x));
|
||||
}
|
||||
else {
|
||||
// scalar
|
||||
return clone(x);
|
||||
}
|
||||
}
|
||||
|
||||
math.squeeze = squeeze;
|
||||
|
||||
/**
|
||||
* Recursively squeeze a multi dimensional array
|
||||
* @param {Array} array
|
||||
* @return {Array} array
|
||||
* @private
|
||||
*/
|
||||
function _squeezeArray(array) {
|
||||
if (array.length == 1) {
|
||||
// squeeze this array
|
||||
return _squeezeArray(array[0]);
|
||||
}
|
||||
else {
|
||||
// process all childs
|
||||
for (var i = 0, len = array.length; i < len; i++) {
|
||||
var child = array[i];
|
||||
if (child instanceof Array) {
|
||||
array[i] = _squeezeArray(child);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function documentation
|
||||
*/
|
||||
squeeze.doc = {
|
||||
'name': 'squeeze',
|
||||
'category': 'Numerics',
|
||||
'syntax': [
|
||||
'squeeze(x)'
|
||||
],
|
||||
'description': 'Remove singleton dimensions from a matrix.',
|
||||
'examples': [
|
||||
'a = zeros(1,3,2)',
|
||||
'size(squeeze(a))',
|
||||
'b = zeros(3,1,1)',
|
||||
'size(squeeze(b))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'transpose', 'zeros'
|
||||
]
|
||||
@ -5068,7 +5135,7 @@ zeros.doc = {
|
||||
'zeros(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'size', 'transpose'
|
||||
'diag', 'identity', 'ones', 'range', 'size', 'squeeze', 'transpose'
|
||||
]
|
||||
};
|
||||
/**
|
||||
|
||||
6
math.min.js
vendored
6
math.min.js
vendored
File diff suppressed because one or more lines are too long
@ -98,6 +98,6 @@ diag.doc = {
|
||||
'diag(a)'
|
||||
],
|
||||
'seealso': [
|
||||
'identity', 'ones', 'range', 'size', 'transpose', 'zeros'
|
||||
'identity', 'ones', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
@ -64,6 +64,6 @@ identity.doc = {
|
||||
'identity(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'ones', 'range', 'size', 'transpose', 'zeros'
|
||||
'diag', 'ones', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
@ -50,6 +50,6 @@ ones.doc = {
|
||||
'ones(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'range', 'size', 'transpose', 'zeros'
|
||||
'diag', 'identity', 'range', 'size', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
@ -52,6 +52,6 @@ size.doc = {
|
||||
'size(1:6)'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'transpose', 'zeros'
|
||||
'diag', 'identity', 'ones', 'range', 'squeeze', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
67
src/function/matrix/squeeze.js
Normal file
67
src/function/matrix/squeeze.js
Normal file
@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Remove singleton dimensions from a matrix. squeeze(x)
|
||||
* @param {Matrix | Array} x
|
||||
* @return {Matrix | Array} res
|
||||
*/
|
||||
function squeeze (x) {
|
||||
if (arguments.length != 1) {
|
||||
throw newArgumentsError('squeeze', arguments.length, 1);
|
||||
}
|
||||
|
||||
if (x instanceof Matrix || x instanceof Range) {
|
||||
return _squeezeArray(x.toArray());
|
||||
}
|
||||
else if (x instanceof Array) {
|
||||
return _squeezeArray(clone(x));
|
||||
}
|
||||
else {
|
||||
// scalar
|
||||
return clone(x);
|
||||
}
|
||||
}
|
||||
|
||||
math.squeeze = squeeze;
|
||||
|
||||
/**
|
||||
* Recursively squeeze a multi dimensional array
|
||||
* @param {Array} array
|
||||
* @return {Array} array
|
||||
* @private
|
||||
*/
|
||||
function _squeezeArray(array) {
|
||||
if (array.length == 1) {
|
||||
// squeeze this array
|
||||
return _squeezeArray(array[0]);
|
||||
}
|
||||
else {
|
||||
// process all childs
|
||||
for (var i = 0, len = array.length; i < len; i++) {
|
||||
var child = array[i];
|
||||
if (child instanceof Array) {
|
||||
array[i] = _squeezeArray(child);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function documentation
|
||||
*/
|
||||
squeeze.doc = {
|
||||
'name': 'squeeze',
|
||||
'category': 'Numerics',
|
||||
'syntax': [
|
||||
'squeeze(x)'
|
||||
],
|
||||
'description': 'Remove singleton dimensions from a matrix.',
|
||||
'examples': [
|
||||
'a = zeros(1,3,2)',
|
||||
'size(squeeze(a))',
|
||||
'b = zeros(3,1,1)',
|
||||
'size(squeeze(b))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'transpose', 'zeros'
|
||||
]
|
||||
};
|
||||
@ -48,6 +48,6 @@ zeros.doc = {
|
||||
'zeros(size(a))'
|
||||
],
|
||||
'seealso': [
|
||||
'diag', 'identity', 'ones', 'range', 'size', 'transpose'
|
||||
'diag', 'identity', 'ones', 'range', 'size', 'squeeze', 'transpose'
|
||||
]
|
||||
};
|
||||
@ -79,3 +79,13 @@ assert.deepEqual(math.diag([[1,2,3],[4,5,6]],-1).valueOf(), [4]);
|
||||
assert.deepEqual(math.diag([[1,2,3],[4,5,6]],-2).valueOf(), []);
|
||||
assert.deepEqual(math.diag(math.range(1,3)).valueOf(), [[1,0,0],[0,2,0],[0,0,3]]);
|
||||
// TODO: test diag for all types of input (also scalar)
|
||||
|
||||
// test squeeze
|
||||
m = math.ones(1,3,2);
|
||||
assert.deepEqual(math.size(m).valueOf(), [1,3,2]);
|
||||
assert.deepEqual(math.size(math.squeeze(m)).valueOf(), [3,2]);
|
||||
m = math.ones(3,1,1);
|
||||
assert.deepEqual(math.size(m).valueOf(), [3,1,1]);
|
||||
assert.deepEqual(math.size(math.squeeze(m)).valueOf(), [3]);
|
||||
assert.deepEqual(math.squeeze(2.3), 2.3);
|
||||
assert.deepEqual(math.size(math.squeeze(math.range(1,5))), [5]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user