| 1598 | } |
| 1599 | |
| 1600 | void Encode::schmidt_encode(const QVec &q, const std::vector<double>& data, const double cutoff) |
| 1601 | { |
| 1602 | vector<double>data_temp(data); |
| 1603 | |
| 1604 | if (!_check_normalized(data_temp)) { |
| 1605 | throw run_fail("Data is not normalized"); |
| 1606 | } |
| 1607 | |
| 1608 | if (data_temp.size() > (1 << q.size())) |
| 1609 | { |
| 1610 | throw run_fail("Schmidt_encode parameter error."); |
| 1611 | } |
| 1612 | |
| 1613 | _schmidt(q, data_temp, cutoff); |
| 1614 | |
| 1615 | int count = log2(data_temp.size()); |
| 1616 | int cnt = 0; |
| 1617 | for (auto i : q) |
| 1618 | { |
| 1619 | if (cnt < count) { |
| 1620 | m_out_qubits.push_back(i); |
| 1621 | } |
| 1622 | cnt++; |
| 1623 | } |
| 1624 | |
| 1625 | return; |
| 1626 | } |
| 1627 | void Encode::_schmidt(const QVec &q, const std::vector<double>& data, const double cutoff) { |
| 1628 | |
| 1629 | vector<double>data_temp = data; |