反转 numpy where 坐标
Reversing numpy where coordinate
objective是提取2D
数组中等于1的单元格所在的坐标
[[1. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
这里的坐标比常规的
flip
8
7
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
因此,对于上面的 2D
数组,
单元格等于 1
的输出是
[(0, 8),(2,4),(3,8)]
我很好奇如何通过考虑这种类型的坐标来调整 np.where
。
简单
cor=np.array(np.where(arr==1)).T
正如预期的那样,结果会与我预期的不同。
上面的数组可以重现
arr=np.zeros((9,9))
arr[0,0]=1
arr[4,2]=1
arr[0,3]=1
备注,顺序不重要,如
[(0, 8),(2,4),(3,8)]
等同于 [(8, 0),(4,2),(8,3)]
您可以在轴 0 上使用 numpy 翻转来翻转数组以获取您的坐标。
arr = np.flip(arr, axis=0)
cor = np.array(np.where(arr==1))
函数 np.where
用于二维数组 returns Tuple(np.ndarray, np.ndarray)
其中元组的第一个条目包含所有行索引,第二个条目包含所有列索引。所以如果你想索引转置数组你必须交换元组条目:
indices = np.where(condition)[::-1]
如果你想将坐标格式转换为二元组列表,你可以这样做:
indices = [(n_rr, c) for r, c in zip(np.where(condition))]
编辑:
经过澄清,我现在明白rpb要改变索引的原点,让第零行变成最后一行等等。此外,坐标需要以每个找到的条目的 2 元素元组的格式。
import numpy as np
arr=np.zeros((9,9))
arr[0,0]=1
arr[4,2]=1
arr[0,3]=1
print(arr)
print(np.where(arr==1.)[0])
n_rows = arr.shape[0]
indices = [(n_rows - 1 -r, c) for r, c in zip(*np.where(arr==1.))]
print(indices)
>>> [(8, 0), (8, 3), (4, 2)]
objective是提取2D
数组中等于1的单元格所在的坐标
[[1. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]]
这里的坐标比常规的
flip
8
7
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
因此,对于上面的 2D
数组,
单元格等于 1
的输出是
[(0, 8),(2,4),(3,8)]
我很好奇如何通过考虑这种类型的坐标来调整 np.where
。
简单
cor=np.array(np.where(arr==1)).T
正如预期的那样,结果会与我预期的不同。
上面的数组可以重现
arr=np.zeros((9,9))
arr[0,0]=1
arr[4,2]=1
arr[0,3]=1
备注,顺序不重要,如
[(0, 8),(2,4),(3,8)]
等同于 [(8, 0),(4,2),(8,3)]
您可以在轴 0 上使用 numpy 翻转来翻转数组以获取您的坐标。
arr = np.flip(arr, axis=0)
cor = np.array(np.where(arr==1))
函数 np.where
用于二维数组 returns Tuple(np.ndarray, np.ndarray)
其中元组的第一个条目包含所有行索引,第二个条目包含所有列索引。所以如果你想索引转置数组你必须交换元组条目:
indices = np.where(condition)[::-1]
如果你想将坐标格式转换为二元组列表,你可以这样做:
indices = [(n_rr, c) for r, c in zip(np.where(condition))]
编辑: 经过澄清,我现在明白rpb要改变索引的原点,让第零行变成最后一行等等。此外,坐标需要以每个找到的条目的 2 元素元组的格式。
import numpy as np
arr=np.zeros((9,9))
arr[0,0]=1
arr[4,2]=1
arr[0,3]=1
print(arr)
print(np.where(arr==1.)[0])
n_rows = arr.shape[0]
indices = [(n_rows - 1 -r, c) for r, c in zip(*np.where(arr==1.))]
print(indices)
>>> [(8, 0), (8, 3), (4, 2)]