在计算三维网格上点的坐标,并将获得的值存储在以下数组中之后:
import numpy as np
x = np.zeros(4*4*8, float)
y = np.zeros(4*4*8, float)
z = np.zeros(4*4*8, float)
for l in range(4*4*8):
x[l], y[l], z[l] = np.unravel_index(l, (8, 4, 4))
我把我的矩阵定义为
def getMatrix(kappa, x, y, z):
nxnynz = 4*4*8
nrange_x = np.arange(nxnynz)
nrange_y = nrange_x
w, r = np.meshgrid(nrange_x, nrange_y)
delta_r = np.sqrt(((x[w]-x[r])**2)+((y[w]-y[r])**2)+((z[w]-z[r])**2)*)
matrix = np.zeros(delta_r.shape)
matrix[delta_r == 0] = 4.*kappa/(nxnynz**3.)
matrix[delta_r != 0] = np.sin(kappa*2.*np.pi*delta_r[delta_r != 0])/(delta_r[delta_r != 0]*float(nxnynz))
其中关键点是当delta_r == 0
和delta_r != 0
时这些值的不同定义。
现在,除了这个规范,我还需要添加另一个规范,即条件(在写得不好的代码中,只是为了给出一个想法)
if ((abs(w-r)) % 8 ) != 0:
matrix[w][r] = 0.
其中w
和r
是以前使用的相同索引。如何在矩阵的先前定义中适应这个新条件
这应该是布尔索引的直接用法。例如:
如果没有充分研究您的代码,我认为您的
matrix
(坏名字)与w
和r
具有相同的形状。我可以在满足条件的地方构造一个布尔数组,并很容易地应用matrix
相关问题 更多 >
编程相关推荐