python - 从 numpy 数组中获取坐标
问题描述
所以也许这是一个关于 numpy 的基本问题,但我不知道该怎么做,所以可以说我有一个像这样的 2D numpy 数组
import numpy as np
arr = np.array([[ 0., 460., 166., 167., 123.],
[ 0., 0., 0., 0., 0.],
[ 0., 81., 0., 21., 0.],
[ 0., 128., 23., 0., 12.],
[ 0., 36., 0., 13., 0.]])
我想要子数组的坐标
[[0., 21,. 0.],
[23., 0., 12.],
[0., 13., 0.]]
我尝试切片我的原始数组并使用np.argwhere
这样的查找坐标
newarr = np.argwhere(arr[2:, 2:] != 0)
#output
#[[0 1]
# [1 0]
# [1 2]
# [2 1]]
这确实是来自子数组的坐标,但我期待与我的原始数组对应的坐标,所需的输出是:
[[2 3]
[3 2]
[3 4]
[4 3]]
如果我使用np.argwhere
原始数组,我会得到一堆我不需要的坐标,所以我无法弄清楚如何获得我需要的东西,任何帮助或者如果你能指出我正确的方向将是太好了谢谢!
解决方案
假设原点位于矩阵的左上角,矩阵本身位于笛卡尔空间的第四象限。水平轴具有列索引,垂直轴向下具有行索引。
您将看到整个子矩阵在(2,2)
坐标上移动了原点。因此,当您获得的坐标相对于原点上的子矩阵时,要(2,2)
再次将它们恢复,只需添加(2,2)
整个元素:
>>> np.argwhere(arr[2:, 2:] != 0) + [2, 2]
array([[2, 3],
[3, 2],
[3, 4],
[4, 3]])
对于其他示例:
>>> col_shift, row_shift = 3, 2
>>> arr[row_shift:, col_shift:]
array([[21., 0.],
[ 0., 12.],
[13., 0.]])
>>> np.argwhere(arr[row_shift:, col_shift:] != 0) + [row_shift, col_shift]
array([[2, 3],
[3, 4],
[4, 3]])
对于完全内部的子矩阵,您可以绑定列和行:
>>> col_shift, row_shift = 0, 1
>>> col_bound, row_bound = 4, 4
>>> arr[row_shift:row_bound, col_shift:col_bound]
array([[ 0., 0., 0., 0.],
[ 0., 81., 0., 21.],
[ 0., 128., 23., 0.]])
>>> np.argwhere(arr[row_shift:row_bound, col_shift:col_bound] != 0) + [row_shift, col_shift]
array([[2, 1],
[2, 3],
[3, 1],
[3, 2]])
推荐阅读
- react-native - 在 Stack Navigator 之间切换 React Native Navigation V5
- python - 如何禁用对熊猫“df.to_csv”中现有值的数据框附加
- node.js - 在 AWS lambda 中调用嵌套函数
- python - 如何在 python 3.8.5 中创建 py 文件的可执行文件?
- mongodb - 模式选项猫鼬中的数据和类型有什么区别
- qt - 来自 qt 的 .ui 文件是否与 python 和 c++ 兼容?
- c# - c#异步文件写入期间的锁定功能
- node.js - 有没有办法可以列出不和谐服务器中的频道
- python - 尝试从 Firebase (pyrebase) 获取用户 ID,但出现错误“路径无效:指定的路径超出了可写入的最大长度(768 字节)
- angular - 如何调用 angular/ionic 子文件夹中的组件?