squeeze extra dims of numpy vectors so no need ravel.

release/4.3a0
Duy-Nguyen Ta 2016-11-30 05:57:12 -05:00
parent 4439968f05
commit 1e425536bb
4 changed files with 21 additions and 9 deletions

View File

@ -48,23 +48,23 @@ class TestKalmanFilter(unittest.TestCase):
# Run iteration 1
state = KF.predict(state, F, B, u, modelQ)
self.assertTrue(np.allclose(expected1, state.mean().ravel()))
self.assertTrue(np.allclose(expected1, state.mean()))
self.assertTrue(np.allclose(P01, state.covariance()))
state = KF.update(state, H, z1, modelR)
self.assertTrue(np.allclose(expected1, state.mean().ravel()))
self.assertTrue(np.allclose(expected1, state.mean()))
self.assertTrue(np.allclose(I11, state.information()))
# Run iteration 2
state = KF.predict(state, F, B, u, modelQ)
self.assertTrue(np.allclose(expected2, state.mean().ravel()))
self.assertTrue(np.allclose(expected2, state.mean()))
state = KF.update(state, H, z2, modelR)
self.assertTrue(np.allclose(expected2, state.mean().ravel()))
self.assertTrue(np.allclose(expected2, state.mean()))
# Run iteration 3
state = KF.predict(state, F, B, u, modelQ)
self.assertTrue(np.allclose(expected3, state.mean().ravel()))
self.assertTrue(np.allclose(expected3, state.mean()))
state = KF.update(state, H, z3, modelR)
self.assertTrue(np.allclose(expected3, state.mean().ravel()))
self.assertTrue(np.allclose(expected3, state.mean()))
if __name__ == "__main__":
unittest.main()

View File

@ -43,7 +43,7 @@ class TestValues(unittest.TestCase):
# special cases for Vector and Matrix:
actualVector = values.atVector(11)
self.assertTrue(np.allclose(vec, actualVector.ravel(), tol))
self.assertTrue(np.allclose(vec, actualVector, tol))
actualMatrix = values.atMatrix(12)
self.assertTrue(np.allclose(mat, actualMatrix, tol))

View File

@ -380,6 +380,7 @@ void Module::emit_cython_pyx(FileWriter& pyxFile) const {
// headers...
string pxdHeader = name + "_wrapper";
pyxFile.oss << "cimport numpy as np\n"
"import numpy as npp\n"
"cimport " << pxdHeader << " as " << "pxd" << "\n"
"from "<< pxdHeader << " cimport shared_ptr\n"
"from "<< pxdHeader << " cimport dynamic_pointer_cast\n";
@ -392,6 +393,13 @@ void Module::emit_cython_pyx(FileWriter& pyxFile) const {
"from libcpp.pair cimport pair\n"
"from libcpp.string cimport string\n"
"from cython.operator cimport dereference as deref\n\n\n";
pyxFile.oss <<
R"rawstr(def Vectorize(*args):
ret = npp.squeeze(npp.asarray(args, dtype='float'))
if ret.ndim == 0: ret = npp.expand_dims(ret, axis=0)
return ret
)rawstr";
for(const Class& cls: expandedClasses)
cls.emit_cython_pyx(pyxFile, expandedClasses);
pyxFile.oss << "\n";

View File

@ -89,8 +89,12 @@ std::string ReturnType::pyx_returnType(bool addShared) const {
/* ************************************************************************* */
std::string ReturnType::pyx_casting(const std::string& var,
bool isSharedVar) const {
if (isEigen())
return "ndarray_copy(" + var + ")";
if (isEigen()) {
string s = "ndarray_copy(" + var + ")";
if (pyxClassName() == "Vector")
return "Vectorize(" + s + ")";
else return s;
}
else if (isNonBasicType()) {
if (isPtr || isSharedVar)
return pyxClassName() + ".cyCreateFromShared(" + var + ")";