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)
有关保存到外部文件的更多信息,请参阅写入外部文件。