You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Numpy数组每个元素为独立自定义对象实例?

创建包含独立对象实例的Numpy数组

你遇到的问题是用numpy.full时,fill_value传入单个ExampleObject实例,导致数组所有元素都指向同一个对象,代码示例如下:

import numpy as np

class ExampleObject():
    pass

my_array = np.full(
    shape=(3, 3),
    fill_value=ExampleObject(),
)

for i in range(3):
    for j in range(3):
        print(id(my_array[i][j]))  # 所有元素输出相同的id

原因很明确:fill_value是预先创建好的单个实例,numpy只是把这个实例的引用复制到数组的每个位置。

你尝试的numpy.fill写法本身就有问题——numpy.fill是现有数组的方法,不是用来创建新数组的函数,所以才会报错。下面提供几种可行的实现方式:

方法1:二维列表推导式转numpy数组

直接生成包含独立对象的二维列表,再转为object类型的numpy数组:

import numpy as np

class ExampleObject():
    pass

# 生成3x3的二维列表,每个元素都是新的ExampleObject实例
my_array = np.array([[ExampleObject() for _ in range(3)] for _ in range(3)], dtype=object)

# 验证每个元素都是独立实例
for i in range(3):
    for j in range(3):
        print(id(my_array[i][j]))  # 每个id都不相同

方法2:使用numpy.fromfunction结合工厂函数

numpy.fromfunction会对数组的每个坐标调用传入的函数,利用这一点可以为每个位置生成新实例:

import numpy as np

class ExampleObject():
    pass

# 工厂函数:每次调用返回新的ExampleObject实例
def create_new_obj(i, j):
    return ExampleObject()

# 根据形状生成数组,每个元素由create_new_obj生成
my_array = np.fromfunction(create_new_obj, shape=(3,3), dtype=object)

这种方法适合需要根据数组坐标生成不同对象的场景,灵活性更高。

方法3:先创建空数组再逐个赋值

先初始化一个object类型的空数组,然后遍历每个位置赋值新实例:

import numpy as np

class ExampleObject():
    pass

# 创建空的3x3 object类型数组
my_array = np.empty((3,3), dtype=object)

# 逐个位置赋值新实例
for i in range(3):
    for j in range(3):
        my_array[i][j] = ExampleObject()

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:03:10