如何用列表初始化NumPy数组?创建填充列表的二维np.array方法
解决方案
当然有啦!不过得分两种情况来看——你是想让数组里的每个元素都指向同一个列表,还是每个位置都有独立的列表?这两种实现方式不太一样,我给你详细说说:
1. 填充相同的列表对象
如果你只是需要数组的每个元素都是同一个固定列表(比如[0, 1]),可以直接用np.full(),它和np.zeros()的用法类似,只需要指定填充的列表即可:
import numpy as np # 创建10x10的二维数组,每个元素都是[0, 1] arr = np.full((10, 10), [0, 1], dtype=object) print(arr[0][0]) # 输出: [0, 1]
⚠️ 注意:这种方式下,数组里所有的列表都是同一个对象的引用。如果你修改其中一个列表,所有位置的列表都会跟着变:
arr[0][0].append(2) print(arr[1][1]) # 输出: [0, 1, 2]
2. 填充独立的列表(每个列表互不影响)
如果需要每个位置的列表都是独立的(修改一个不会影响其他),就不能直接用np.full()了,推荐用列表推导式先构建嵌套列表,再转成numpy数组:
import numpy as np # 创建10x10的二维数组,每个元素都是独立的空列表 arr = np.array([[[] for _ in range(10)] for _ in range(10)], dtype=object) # 测试独立性 arr[0][0].append(1) print(arr[0][0]) # 输出: [1] print(arr[1][1]) # 输出: [],不受影响
你也可以把空列表换成自定义的初始列表,比如[1,2,3]:
arr = np.array([[[1,2,3] for _ in range(10)] for _ in range(10)], dtype=object)
另外,如果你想用更“numpy风格”的方法,也可以用np.fromfunction(),不过写法会稍微复杂一点:
arr = np.fromfunction(lambda i, j: [], shape=(10,10), dtype=object)
这种方式同样会生成独立的空列表。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

