使用 class 对象设置 Numpy 数组元素
setting Numpy array elements with a class object
我创建了一个名为 Tensor
的 class
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]])
我创建了一个名为 Tensor
import numpy as np
class Tensor:
def __init__(self, data):
self.data = np.array(data)
我想使用 Tensor
:
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]])