python - 将 3D 列表转换为 3D NumPy 数组

标签 python list python-3.x numpy

目前,我有一个锯齿状数组格式的 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/

相关文章:

python - 如何将输出文件从 Django 保存到 Amazon S3

C# List<GenericClass>(100) 构造原理

Python:响应命令行提示

python-3.x - python : finding elements of a webpage to scrape in python when page content is loaded using Java script

python - 有最新版本的pyUIQ吗?

python - 使用 Python/Beautiful soup/pandas 从表中只抓取选定的文本

python - 为什么返回 `None` 而不是 tkinter.Entry 对象?

c# - 为什么不继承List<T>呢?

c# - 替换作为属性/公共(public)字段检索的对象列表中的元素

python - 在一个范围内生成多组随机的、不重叠的间隔