python - 如何根据条件在numpy数组中插入行
问题描述
我有两个 numpy 数组列表,并希望将一个列表的数组插入另一个列表的数组中:
big_list=[np.array([[1., 1., 2.], [1., 1., 1.9], [1., 1., 5.2]]),
np.array([[1., 3., 5.1], [0., 0., 1.2], [1., 1., 1.4]])]
small_list= [np.array([[-1., -1., -5.]]),
np.array([[-1., -1., -1.], [0., -2., -0.5]])]
我想在第一个数组中插入第一个数组,small_list
在第二big_list
个数组中插入第二small_list
个数组big_list
。我想把small_list
第三列big_list
有显着变化的地方。在 的第一个数组中big_list
,从第二行到第三行,第三列变化很大(从1.9
到5.2
)。对于 的第二个数组big_list
,更改发生在第一行之后(从5.1
到1.2
)。例如,我想使用像3
, 这样的阈值来表示一行的第三列与下一行的差异。所以,我想拥有:
merged= [np.array([[1., 1., 2.], [1., 1., 1.9], [-1., -1., -5.], [1., 1., 5.2]]),
np.array([[1., 3., 5.1], [-1., -1., -1.], [0., -2., -0.5], [0., 0., 1.2], [1., 1., 1.4]])]
目前,我的代码只能small_list
在末尾附加行big_list
:
merged = [np.append(array, to_append, axis=0) for (array, to_append) in zip(big_list, small_list)]
有没有办法在我想要的地方插入这些行?在此之前,我非常感谢任何帮助。
解决方案
试试这个-
for i, arr in enumerate(big_list):
diff = list(abs(np.diff(arr[:,-1])) >= 3)
for t, threshold_state in enumerate(diff):
if threshold_state:
big_list[i] = np.insert(big_list[i], t+1, small_list[i], axis=0)
输出
[array([[ 1. , 1. , 2. ],
[ 1. , 1. , 1.9],
[-1. , -1. , -5. ],
[ 1. , 1. , 5.2]]),
array([[ 1. , 3. , 5.1],
[-1. , -1. , -1. ],
[ 0. , -2. , -0.5],
[ 0. , 0. , 1.2],
[ 1. , 1. , 1.4]])]
推荐阅读
- schema - OpenAPI 示例多部分表单数据
- css - 在 CSS 中使用计算开关来定义 v-img 的 top 属性
- r - 循环遍历模式列表以将它们删除为 R 中的字符串列
- javascript - 在 React Native 中提交表单时处理键盘事件?
- react-native - ScrollView 和 PullToRefresh 在本机反应中发生冲突
- java - Apache Tomcat 拒绝超过 19KB 的 post 请求并返回 400 BAD REQUEST
- android - UiAutomatorViewer 不适用于辅助/多显示器
- git - 我无法从 git 中删除特定的提交
- excel - VBA宏自动过滤一个日期和特殊单元格删除
- python - 部署脚本时的最佳实践