Mars Tensor#

Mars张量可以从numpy ndarrays或外部文件创建。

从numpy ndarray创建一个Mars张量。

>>> import mars.tensor as mt
>>> import numpy as np
>>> t = mt.tensor(np.random.rand(4, 4))

将HDF5文件读入Mars张量。

>>> import mars.tensor as mt
>>> t = mt.from_hdf5('t.hdf5', dataset='t')

有关更多信息,请参阅 张量创建例程从外部文件读取

Mars张量的使用与numpy非常相似,只是Mars张量是惰性求值的。您需要调用 .execute() 来获得最终结果。

请记住,.execute() 将返回 Mars 张量本身。

>>> (t - (t + 1).sum()).execute()
array([[-23.06773811, -22.86112123, -23.03988405, -22.48884341],
       [-22.54959727, -22.13498645, -22.97627675, -23.09852276],
       [-23.11085224, -22.63999173, -22.27187961, -22.34163038],
       [-22.40633932, -22.17864095, -23.04577731, -22.76189835]])

有关更多已实现的张量 API,请参阅 张量 API 参考

一旦张量被执行,.fetch() 可以被调用以获取结果作为 numpy ndarray。一个快捷方式 .to_numpy().execute().fetch() 完全相同。

>>> t.to_numpy()
array([[0.06386055, 0.27047743, 0.09171461, 0.64275525],
       [0.5820014 , 0.99661221, 0.15532191, 0.0330759 ],
       [0.02074642, 0.49160693, 0.85971905, 0.78996828],
       [0.72525934, 0.95295771, 0.08582136, 0.36970032]])

>>> type(t.execute())
mars.tensor.core.Tensor

>>> type(t.execute().fetch())
numpy.ndarray

>>> t.execute().fetch()
array([[0.06386055, 0.27047743, 0.09171461, 0.64275525],
       [0.5820014 , 0.99661221, 0.15532191, 0.0330759 ],
       [0.02074642, 0.49160693, 0.85971905, 0.78996828],
       [0.72525934, 0.95295771, 0.08582136, 0.36970032]])

注意

用户应始终考虑使用 .execute() 而不是 .to_numpy(),因为当张量很大时, .execute() 只会获取边缘项以供显示目的。另一方面, .to_numpy() 将尝试在服务器端生成整个数组并将其返回给客户端,这非常低效,并可能导致内存溢出错误。

如果需要同时执行多个张量,可以使用 mars.execute()

>>> import mars
>>> import mars.tensor as mt
>>> z = mt.zeros((3, 3))
>>> t = mt.ones((3, 3))
>>> mars.execute(z, t)
(array([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]]),
 array([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]))

张量可以保存到外部文件,例如,HDF5。

>>> import mars.tensor as mt
>>> mt.to_hdf5('my.hdf5', mt.random.rand(3, 3), dataset='r').execute()
array([], shape=(0, 0), dtype=float64)

有关保存到外部文件的更多信息,请参阅写入外部文件