Python 什么是Pytork中的扩展的numpy等价物?

Python 什么是Pytork中的扩展的numpy等价物?,python,numpy,pytorch,Python,Numpy,Pytorch,假设我有一个形状为[1,5]的numpy数组x。我想沿着轴0展开它,这样得到的数组y具有形状[10,5],并且y[I:I+1,:]对于每个I等于x 如果x是一个pytorch张量,我可以简单地做 y = x.expand(10,-1) 但是numpy中没有展开,看起来像它的(展开和重复)看起来也不像它 例如: 导入火炬 >>>x=火炬。随机数(1,5) >>>打印(x) 张量([[1.3306,0.0627,0.5585,-1.3128,-1.4724]] >>>打印(x.expand(10

假设我有一个形状为
[1,5]
的numpy数组
x
。我想沿着轴0展开它,这样得到的数组
y
具有形状[10,5],并且
y[I:I+1,:]
对于每个I等于
x

如果
x
是一个pytorch张量,我可以简单地做

y = x.expand(10,-1)
但是numpy中没有
展开
,看起来像它的(
展开
重复
)看起来也不像它


例如:

导入火炬 >>>x=火炬。随机数(1,5) >>>打印(x) 张量([[1.3306,0.0627,0.5585,-1.3128,-1.4724]] >>>打印(x.expand(10,-1)) 张量([[1.3306,0.0627,0.5585,-1.3128,-1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724], [ 1.3306, 0.0627, 0.5585, -1.3128, -1.4724]])
numpy拥有
numpy.newaxis

y=x[:,np.newaxis]
您可以通过以下方法实现这一点。但不能使用负数:

>>> import numpy as np
>>> x = np.array([[ 1.3306,  0.0627,  0.5585, -1.3128, -1.4724]])
>>> print(np.broadcast_to(x,(10,5)))
[[ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]
 [ 1.3306  0.0627  0.5585 -1.3128 -1.4724]]

可以使用
np.tile
将给定轴的元素重复为:

>x=np.范围(5)
>>>x=np。展开尺寸(x,0)
>>>x.形状
(1, 5)
>>>y=np.tile(x,(10,1))#重复轴=0 10次,轴=1 1次
>>>y形
(10, 5)

numpy.reformate()可能就是你要找的?@DaveIdito否。reforme只是改变形状,而
expand
实质上是将数据复制到新的维度。我认为这不是OP要找的:这只是添加一个新维度,而不是扩展现有维度。扩展通常用于向量乘以矩阵。numpy有广播,所以实际上可能是多余的,这与pytorch的工作原理完全相同。但显式地这样做使用了一种稍微不同的方法。