[英]TypeError: 'float' object is not subscriptable in 3d array
伙计们,我正在尝试编写一个获取3-D数组并检查其单元格为空的函数。 但我会收到以下错误
in checkpoint
if m[i][j][0] == 0:
TypeError: 'float' object is not subscriptable
我的功能如下
def checkpoint(m, i, j):
c = 0
if m[i][j][0] == 0:
c += 1.0
if m[i][j][1] == 0:
c += 1.0
if m[i][j][2] == 0:
c += 1.0
if m[i][j][3] == 0:
c += 1.0
return c
它来自我正在使用的大型模块中的功能
def check(m, size):
flag = 2
for i in range(size):
for j in range(size):
print(i, j, "/n")
c = checkpoint(m, i, j)
s = summ(m, i, j)
if c == 2:
if s == 2 or -2:
flag = 1.0
if m[i][j][0] == 0:
if m[i][j][1] == 0:
m[i][j][0] = m[i][j][1] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 1, size)
elif m[i][j][2] == 0:
m[i][j][0] = m[i][j][2] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 2, size)
else:
m[i][j][0] = m[i][j][3] = (-s/2)
fix(m, i, j, 0, size)
fix(m, i, j, 3, size)
elif m[i][j][1] == 0:
if m[i][j][2] == 0:
m[i][j][1] = m[i][j][2] = (-s/2)
fix(m, i, j, 1, size)
fix(m, i, j, 2, size)
elif m[i][j][3] == 0:
m[i][j][1] = m[i][j][3] = (-s/2)
fix(m, i, j, 1, size)
fix(m, i, j, 3, size)
else:
m[i][j][2] = m[i][j][3] = (-s/2)
if c == 3:
flag = 1.0
if m[i][j][0] == 0:
m[i][j][0] = -s
elif m[i][j][1] == 0:
m[i][j][1] = -s
elif m[i][j][2] == 0:
m[i][j][2] = -s
else:
m[i][j][3] = -s
return m, flag
任何评论将不胜感激
更新:
我拼命在模块内部运行该函数,发现在check函数中i和j的第一次迭代和第二次迭代没有任何问题。 但之后将面临错误。
这是我的输出: 我尝试运行的代码的输出
如您所见,它在i in check函数的第一次迭代中没有任何问题。
这是我的修复功能。 相对于刚刚更改的箭头,它更改了其他一些单元格。
def fix(m, i, j, k, size):
ip = i - 1
jp = j - 1
iz = i + 1
jz = j + 1
if ip < 0:
ip = size - 1
if jp < 0:
jp = size - 1
if iz > size - 1:
iz = 0
if jz > size - 1:
jz = 0
kp = (k+2) % 4
if k == 0:
m[i][jz][kp] = -1 * m[i][j][k]
if k == 1:
m[iz][j][kp] = -1 * m[i][j][k]
if k == 2:
m[i][jp][kp] = -1 * m[i][j][k]
if k == 3:
m[ip][j][kp] = -1 * m[i][j][k]
return m
在这里您可以找到整个程序包: 我的代码
这意味着m实际上不是3d数组,代码试图在float
上执行[i]
或[i][j]
或[i][j][0]
。
所描述的“容器”的“脚本化” 在这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.