我创建了一个名为Tensor的类

import numpy as np

class Tensor:
    def __init__(self, data):
        self.data = np.array(data)

我想使用Tensor设置numpy数组的元素:

x = np.array([[1,2,3,4],[4,3,2,1]])
x[:,::2] = Tensor([[0,0],[1,1]])

但结果是错误ValueError: setting an array element with a sequence.

一种解决方法是检索Tensor的数据属性:x[:,::2] = Tensor([[0,0],[1,1]]).data,但我想知道如何在不手动检索任何内容的情况下执行此操作,例如可以使用列表或numpy数组设置值:x[:,::2] = [[0,0],[1,1]]x[:,::2] = np.array([[0,0],[1,1]])

推荐答案

Numpy数组对象都遵循一个协议,只要实现__array__方法,就可以将该对象用作数组:

>>> class Tensor:
...     def __init__(self, data):
...         self.data = np.array(data)
...     def __array__(self, dtype=None):
...         return self.data    # self.data.astype(dtype, copy=False) maybe better
...
>>> x[:,::2] = Tensor([[0,0],[1,1]])
>>> x
array([[0, 2, 0, 4],
       [1, 3, 1, 1]])

参考:Writing custom array containers

Python相关问答推荐

如何在Windows上用Python提取名称中带有逗号的文件?

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

将输入管道传输到正在运行的Python脚本中

如何制作10,000年及以后的日期时间对象?

用Python解密Java加密文件

通过pandas向每个非空单元格添加子字符串

ODE集成中如何终止solve_ivp的无限运行

numpy卷积与有效

try 将一行连接到Tensorflow中的矩阵

让函数调用方程

如何更改groupby作用域以找到满足掩码条件的第一个值?

跳过嵌套JSON中的级别并转换为Pandas Rame

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

Numpyro AR(1)均值切换模型抽样不一致性

如何在Python Pandas中填充外部连接后的列中填充DDL值

如何防止html代码出现在quarto gfm报告中的pandas表之上

启动线程时,Python键盘模块冻结/不工作

极点用特定值替换前n行

Pandas:使列中的列表大小与另一列中的列表大小相同

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)