Bbox.from_bounds() takes 4 positional arguments but 500 were given
时间: 2023-12-29 10:04:03 浏览: 34
`Bbox.from_bounds()`是matplotlib中创建一个`Bbox`对象的函数,用于指定一个矩形区域的左下角和右上角坐标。该函数的参数包括四个浮点数,分别表示左边界、下边界、宽度和高度。例如,`Bbox.from_bounds(1, 2, 3, 4)`表示一个左边界为1,下边界为2,宽度为3,高度为4的矩形区域。
如果你遇到了“`Bbox.from_bounds() takes 4 positional arguments but 500 were given`”这个错误,那么很可能是因为你在调用该函数时传入了错误的参数数量。该函数只接受四个参数,而你传入了500个参数,因此出现了错误。
你需要检查一下调用该函数时传入的参数数量是否正确,并且每个参数的类型是否正确。如果你还有其他的问题,可以提供更多的上下文信息,我会尽力帮助你解决问题。
相关问题
TypeError: matplotlib.transforms.Bbox.from_bounds() argument after * must be an iterable, not int
这个错误通常是因为在调用`matplotlib.transforms.Bbox.from_bounds()`函数时,传递的参数不正确导致的。这个函数的参数需要传入4个浮点数,分别表示一个矩形的左下角和右上角的坐标。
例如,下面的代码就会出现这个错误:
```python
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
fig, ax = plt.subplots()
bbox = Bbox.from_bounds(0, 0, 100, 100)
```
上面的代码中,我们调用`Bbox.from_bounds()`函数时,传递的参数分别是0、0、100和100,这是4个整数,而函数要求的是4个浮点数。
为了解决这个问题,我们需要将传递的参数改为浮点数:
```python
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
fig, ax = plt.subplots()
bbox = Bbox.from_bounds(0.0, 0.0, 100.0, 100.0)
```
上面的代码中,我们将传递的参数改为了浮点数,这样就不会再出现上述错误了。
需要注意的是,在使用`Bbox.from_bounds()`函数时,参数的顺序应该是左、下、右、上,即先是左下角的坐标,再是右上角的坐标。
void Trajectory::predict_box( uint idx_duration, std::vector<Box>& vec_box, std::vector<Eigen::MatrixXf, Eigen::aligned_allocatorEigen::MatrixXf>& vec_cova, bool& is_replay_frame) { vec_box.clear(); vec_cova.clear(); if (is_replay_frame) { for (auto iter = map_current_box_.begin(); iter != map_current_box_.end(); ++iter) { Destroy(iter->second.track_id()); } m_track_start_.Clear_All(); NU = 0; is_replay_frame = false; } Eigen::MatrixXf F_temp = F_; F_temp(0, 1) = idx_duration * F_(0, 1); F_temp(2, 3) = idx_duration * F_(2, 3); F_temp(4, 5) = idx_duration * F_(4, 5); uint64_t track_id; Eigen::Matrix<float, 6, 1> state_lidar; Eigen::Matrix<float, 6, 6> P_kkminus1; Eigen::Matrix3f S_temp; for (auto beg = map_current_box_.begin(); beg != map_current_box_.end(); ++beg) { float t = (fabs(0.1 - beg->second.frame_duration()) > 0.05) ? 0.1 : 0.2 - beg->second.frame_duration(); F_temp(0, 1) = t; F_temp(2, 3) = t; F_temp(4, 5) = t; // uint64_t timestamp_new = beg->second.timestamp() + uint(10.0 * t * NANO_FRAME); track_id = beg->first; state_lidar = F_temp * map_lidar_state_.at(track_id); P_kkminus1 = F_temp * map_lidar_cova_.at(track_id) * F_temp.transpose() + Q_lidar_; S_temp = H_ * P_kkminus1 * H_.transpose() + R_lidar_; float psi_new = (1 - P_D_ * P_G_) * beg->second.psi() / (1 - P_D_ * P_G_ * beg->second.psi()); Box bbox = beg->second; bbox.set_psi(psi_new); // bbox.set_timestamp(timestamp_new); bbox.set_position_x(state_lidar(0)); bbox.set_position_y(state_lidar(2)); bbox.set_position_z(state_lidar(4)); bbox.set_speed_x(state_lidar(1)); bbox.set_speed_y(state_lidar(3)); bbox.set_speed_z(state_lidar(5)); vec_box.emplace_back(bbox); vec_cova.emplace_back(S_temp); } AINFO << "Finish predict with duration frame num: " << idx_duration; } 代码解读
这段代码是一个名为Trajectory的类中的predict_box函数。函数接受一个时间段的索引(idx_duration),一个存储Box对象的向量(vec_box),一个存储Eigen矩阵的向量(vec_cova),以及一个布尔变量(is_replay_frame)作为参数。
首先,函数清空vec_box和vec_cova两个向量。
然后,如果is_replay_frame为true,则遍历map_current_box_中的元素,并销毁每个元素的track_id。然后清空m_track_start_和NU,并将is_replay_frame设置为false。
接下来,创建一个临时的F_temp矩阵,并将其与原始的F_矩阵进行乘法操作,并将其中的某些元素乘以idx_duration。这是为了根据时间段来预测box的状态。
然后,遍历map_current_box_中的元素。对于每个元素,计算一个临时变量t,并根据t更新F_temp矩阵。然后使用F_temp和map_lidar_state_中相应的track_id来计算state_lidar矩阵。接着,使用F_temp、map_lidar_cova_中相应的track_id和Q_lidar_来计算P_kkminus1矩阵。再使用H_、P_kkminus1和R_lidar_来计算S_temp矩阵。
之后,根据一些计算得到的值,更新beg->second中的一些属性,并将其加入vec_box中。同时,将S_temp加入vec_cova中。
最后,输出一条日志信息,表示完成了使用给定时间段进行预测。
请注意,这只是对代码进行的初步解读,具体实现可能还涉及其他变量和函数。