假设我的矩阵中有一个兴趣点,即 NxN。该点位于位置 ij 。那么,给定索引 ij,是否有一种简单的方法来获取通过 ij 并到达原点(位于矩阵中间)的线元素?
我正在使用 torch,虽然使用 torch.diag 将是第一个开始,但实际上这个函数不会在矩阵的中间传递。
def directionalK(kx,ky, indices):
'''Function that provides the K values at a given direction dictated by the indices'''
kx_grid,ky_grid = torch.meshgrid(kx,kx, indexing='ij')
k_grid = torch.sqrt(kx_grid**2 + ky_grid**2)
k_grid[...,:len(k_grid)//2] *=-1
y,x = indices
diag = x - len(k_grid)//2
我认为你可以使用 sklearn.draw.line 方法来解决这个问题,在该方法中你输入起始 (i,j) 和结束 (0,0) 坐标,它会计算属于可用于索引的线的索引.
工作示例:
from skimage.draw import line
import numpy as np
import matplotlib.pyplot as plt
arr = np.zeros((100, 100))
i, j = 10, 80
origin = 0, 0
rr, cc = line(*origin, i, j)
arr[rr, cc] = 1
plt.imshow(arr, cmap='gray', interpolation='nearest')
或者如果您希望线路继续:
arr = np.zeros((100, 100))
rr, cc = line(i, j, 2*origin[0]-i, 2*origin[1]-j)
arr[rr, cc] = 2
plt.imshow(arr, cmap='gray', interpolation='nearest')