Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中优化2D-1D操作_Python_Numpy - Fatal编程技术网

在python中优化2D-1D操作

在python中优化2D-1D操作,python,numpy,Python,Numpy,应用简单运算(如乘法)的pythonic cpu优化方法是什么: 沿二维阵列的一维 到二维数组其他维度的所有元素 根据另一个一维数组中的元素 ? 例如: x=np.arange(150).reshape([50,3]) y=np.arange(50)+10 我想做: np.array([x[i,:]*y[i] for i in range(50)]) 但我想让它尽可能快,因为“50”可能是亿万 顺便问一下,这完全等同于: np.array([x[i,:]*j for i,j in enume

应用简单运算(如乘法)的pythonic cpu优化方法是什么:

沿二维阵列的一维 到二维数组其他维度的所有元素 根据另一个一维数组中的元素 ?

例如:

x=np.arange(150).reshape([50,3])
y=np.arange(50)+10
我想做:

np.array([x[i,:]*y[i] for i in range(50)])
但我想让它尽可能快,因为“50”可能是亿万

顺便问一下,这完全等同于:

np.array([x[i,:]*j for i,j in enumerate(y)])
?


我在这里做了一些更新,但最后打开了一个新问题

您可以使用None或np.newaxis向y添加一个新轴,这样它就可以在x上广播:


您可以使用None或np.newaxis向y添加一个新轴,以便在x上广播:


另一种可能,使用瑞士军刀阵列产品,即


另一种可能,使用瑞士军刀阵列产品,即


你可以做任何事情,没有einsum,你只需要找到正确的组合换位,虚拟轴和重塑。。。我建议您在解释器中使用小数组进行一点实验,以了解所有不同的可能性。您可以在不使用einsum的情况下做任何事情,您只需找到正确的换位、虚拟轴和重塑组合。。。我建议你用小数组在口译员中进行一点实验,以了解所有不同的可能性。如果你有新问题,请提出新问题。我将练习einsum see 2de答案,如果我还有问题,请回来。如果你有新问题,请提出新问题。我将练习einsum see 2de如果我还有问题,请回答并回来
x * y[:,None]
np.allclose((x * y[:,None]), np.array([x[i,:]*y[i] for i in range(50)]))
# True
In [9]: x=np.arange(150).reshape([50,3])
   ...: y=np.arange(50)+10
   ...: check=np.array([x[i,:]*y[i] for i in range(50)])
   ...: np.allclose(np.einsum('ji,j->ji', x, y),check)
Out[9]: True