概述
a=np.arange(20).reshape((5,4)) b=np.ones(5) c=a*b[:,np.newaxis]
很简单,但我想将这个想法扩展到n维(对于a,而b总是1d)和任何轴.换句话说,我想知道如何在正确的位置生成np.newaxis的切片.假设a是3d并且我想沿轴= 1乘以,我想生成正确给出的切片:
c=a*b[np.newaxis,:,np.newaxis]
即给定a(比如3)的维数,以及我想要乘以的轴(比如轴= 1),我如何生成并传递切片:
np.newaxis,np.newaxis
谢谢.
import numpy as np # Given axis along which elementwise multiplication with broadcasting # is to be performed given_axis = 1 # Create an array which would be used to reshape 1D array,b to have # singleton dimensions except for the given axis where we would put -1 # signifying to use the entire length of elements along that axis dim_array = np.ones((1,a.ndim),int).ravel() dim_array[given_axis] = -1 # Reshape b with dim_array and perform elementwise multiplication with # broadcasting along the singleton dimensions for the final output b_reshaped = b.reshape(dim_array) mult_out = a*b_reshaped
示例运行步骤的演示 –
In [149]: import numpy as np In [150]: a = np.random.randint(0,9,(4,2,3)) In [151]: b = np.random.randint(0,(2,1)).ravel() In [152]: whos Variable Type Data/Info ------------------------------- a @R_502_1391@ 4x2x3: 24 elems,type `int32`,96 bytes b @R_502_1391@ 2: 2 elems,8 bytes In [153]: given_axis = 1
现在,我们想沿给定的轴= 1执行元素乘法.让我们创建dim_array:
In [154]: dim_array = np.ones((1,int).ravel() ...: dim_array[given_axis] = -1 ...: In [155]: dim_array Out[155]: array([ 1,-1,1])
最后,重塑b&执行元素乘法:
In [156]: b_reshaped = b.reshape(dim_array) ...: mult_out = a*b_reshaped ...:
再次查看whos信息并特别注意b_reshaped& mult_out:
In [157]: whos Variable Type Data/Info --------------------------------- a @R_502_1391@ 4x2x3: 24 elems,96 bytes b @R_502_1391@ 2: 2 elems,8 bytes b_reshaped @R_502_1391@ 1x2x1: 2 elems,8 bytes dim_array @R_502_1391@ 3: 3 elems,12 bytes given_axis int 1 mult_out @R_502_1391@ 4x2x3: 24 elems,96 bytes
总结
以上是编程之家为你收集整理的python – 沿给定轴乘以1d数组的numpy ndarray全部内容,希望文章能够帮你解决python – 沿给定轴乘以1d数组的numpy ndarray所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧