【发布时间】:2017-06-29 19:14:27
【问题描述】:
我在概念化 3 维矩阵时遇到了困难,我需要它来制作各种真值表。我正在尝试通过 3D 矩阵,并将每个元素与与其相邻的所有其他元素进行比较(但不在对角线上)。我有一个函数 (truth_table),它应该采用一组 3D 坐标并返回一个矩阵,该矩阵告诉我可以安全调用哪些周围坐标,而不必担心 INDEX_OUT_OF_BOUNDS 异常。我是 N 维矩阵的新手,在制作这个真值表时遇到了麻烦,这在 2D 中很容易。
import numpy as np
array_rows=10
array_cols=10
array_height=10
laser_power=2e-3
T_MATRIX=np.full((array_rows,array_cols,array_height),0.0)
H_MATRIX=np.full((array_rows,array_cols,array_height),0.0)
H_MATRIX[5,5,5]=laser_power
constants=0.5
def truth_table(row,col,height):
skeleton=np.array([
[[False,False,False],[False,height<array_height-1,False],[False,False,False]],[[False,row>0,False],[col>0,False,col<array_cols-1],[False,row<array_rows-1,False]],[[False,False,False],[False,height>0,False],[False,False,False]]])
def update_T():
global T_MATRIX
for row in range(array_rows):
for col in range(array_cols):
for height in range(array_height):
T_MATRIX[row][col][height]+=H_MATRIX[row][col][height]*constants
def reset_H():
global H_MATRIX
for row in range(array_rows):
for col in range(array_cols):
for height in range(array_height):
H_MATRIX[row][col][height]=0.0
H_MATRIX[5,5,5]=laser_power
def update_H():
global H_MATRIX
for row in range(array_rows):
for col in range(array_cols):
for height in range(array_height):
my_table=truth_table(row,col,height)
count=np.sum(my_table)
T_DIFF=0.0
AVG_T=0.0
for r in range(3):
for c in range(3):
for h in range(3):
if(my_table[r][c][h]):
T_DIFF+=T_MATRIX[row][col][height]-T_MATRIX[row+(r-1)][col+(c-1)][height+(h-1)]
if(count>0):
AVG_T=T_DIFF/count
H_MATRIX[row][col][height]+=T_DIFF*constants
def update_stuff():
##UPDATE THE TEMP
update_T()
reset_H()
update_H()
update_stuff()
print T_MATRIX[5][5][5]
#print constants
【问题讨论】:
-
以防万一:你能准确描述一下你打算用这样一个矩阵做什么吗?听起来你有一个x-y problem。如果您使用此函数获取索引,然后插入不同的函数,则可能有比解决当前问题(例如卷积)更好的方法。