Python 三维矩阵真值表

Python 三维矩阵真值表,python,numpy,matrix,3d,Python,Numpy,Matrix,3d,我很难概念化一个三维矩阵,我需要一个真值表。我试图遍历一个3D矩阵,并将每个元素与相邻的所有其他元素进行比较(但不是在对角线上)。我有一个函数(truth_table),它应该获取一组3D坐标并返回一个矩阵,该矩阵告诉我可以安全调用哪些周围坐标,而不用担心索引超出边界异常。我对N维矩阵不熟悉,在制作这个真值表时遇到了困难,在2D中这很容易 import numpy as np array_rows=10 array_cols=10 array_height=10 laser_power=2e-3

我很难概念化一个三维矩阵,我需要一个真值表。我试图遍历一个3D矩阵,并将每个元素与相邻的所有其他元素进行比较(但不是在对角线上)。我有一个函数(truth_table),它应该获取一组3D坐标并返回一个矩阵,该矩阵告诉我可以安全调用哪些周围坐标,而不用担心索引超出边界异常。我对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
将numpy导入为np
数组_行=10
数组_cols=10
阵列高度=10
激光功率=2e-3
T_矩阵=np.full((数组行、数组列、数组高度),0.0)
H_矩阵=np.full((数组行、数组列、数组高度),0.0)
H_矩阵[5,5,5]=激光功率
常数=0.5
def TRUSH_表(行、列、高度):
skeleton=np.array([
[False,False,False],[False,height0,False],[col>0,False,col0]:
平均T=T差异/计数
H_矩阵[row][col][height]+=T_DIFF*常数
def update_stuff():
##更新温度
更新()
重置_H()
更新_H()
更新_stuff()
打印T_矩阵[5][5][5]
#打印常量

因为这个问题可能会被放弃或关闭,这里有一些东西可能会帮助您思考这个问题。看起来您正在做的事情是,您感兴趣的是计算单元格的值与其最近邻居的值之间的差值/平均值

在三维晶格上,单元的最近邻位于以下位置(以感兴趣的单元为中心):

可以使用numpy使用

f = np.zeros((3,3,3))
f[[0,1,1,1,1,2],[1,0,1,1,2,1],[1,1,0,2,1,1]] = 1
此最近邻过滤器(或内核)与形状(N1、N2、N3)的任何3D数组A1的组合将为您提供形状(N1、N2、N3)的新数组A2,其中A2中的每个值是A1中相邻值的总和。例如:

>>> A1 = np.arange(27).reshape(3,3,3)
>>> A1
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

>>> A2 = scipy.ndimage.convolve(A1, f)
>>> A2
array([[[ 13,  18,  23],
        [ 28,  33,  38],
        [ 43,  48,  53]],

       [[ 58,  63,  68],
        [ 73,  78,  83],
        [ 88,  93,  98]],

       [[103, 108, 113],
        [118, 123, 128],
        [133, 138, 143]]])
A2的第一个条目是13=1+3+9。A2的中间条目是78=4+10+12+14+16+22

你可以用这些卷积很容易地得到你要找的一些量。看起来
H_矩阵
可以简单地用

H_MATRIX = constants * (T_MATRIX - convolve(T_MAXTRIX, f))

使用上面定义的
f
。或者,您可以定义一个不同的
f
,它在中心有一个1,在其他6个位置有一个-1,这可能只给您
H_矩阵=常数*卷积(T_矩阵,f)

以防万一:你能准确描述一下你打算用这样一个矩阵做什么吗?听起来你有一个。如果你用这个函数来获取索引,然后插入到另一个函数中,可能有比解决当前问题(例如卷积)更好的方法。
H_MATRIX = constants * (T_MATRIX - convolve(T_MAXTRIX, f))