目前,我有一个锯齿状数组格式的 3D Python 列表。
A = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0], [0], [0]]]
有什么方法可以将此列表转换为 NumPy 数组,以便使用某些 NumPy 数组运算符,例如向每个元素添加一个数字。
A + 4
会得到 [[[4, 4, 4], [4, 4, 4], [4, 4, 4]], [[4], [4] , [4]]]
.
分配 B = numpy.array(A)
然后尝试 B + 4
会引发类型错误。
TypeError:只能将列表(不是“ float ”)连接到列表
是否可以在保留结构的同时从锯齿状 Python 列表转换为 NumPy 数组(我需要稍后将其转换回来),或者循环遍历数组并添加所需的更好的解决方案?
最佳答案
@SonderingNarcissit 和@MadPhysicist 的回答已经很不错了。
这是为列表中的每个元素添加数字并保持结构的快速方法。如果您不仅想添加一个数字,还想用它做其他事情,您可以用任何您喜欢的东西替换函数 return_number
:
def return_number(my_number):
return my_number + 4
def add_number(my_list):
if isinstance(my_list, (int, float)):
return return_number(my_list)
else:
return [add_number(xi) for xi in my_list]
A = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0], [0], [0]]]
然后
print(add_number(A))
给你想要的输出:
[[[4, 4, 4], [4, 4, 4], [4, 4, 4]], [[4], [4], [4]]]
所以它所做的是递归地查看您的列表列表,并且每次找到一个数字它都会添加值 4;这应该适用于任意深度的嵌套列表。目前仅适用于数字和列表;如果你也有列表中还有字典,那么您将不得不添加另一个 if 子句。
关于python - 将 3D 列表转换为 3D NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289943/