Numpy中的高维管理

Numpy中的高维管理,numpy,array-broadcasting,Numpy,Array Broadcasting,我想写一个包含4个变量的函数:f(x1,x2,x3,x4),每个变量的维数不同 这可以通过f(x1,x2[newaxis],x3[newaxis,newaxis],x4[newaxis,newaxis,newaxis])实现 你知道一种更聪明的方法吗?一种方法是重塑每个阵列,沿前导轴提供适当数量的单态维度。要在所有数组中执行此操作,我们可以使用列表理解 因此,处理一般数量的输入数组的一种方法是- L = [x1,x2,x3,x4] out = [l.reshape([1]*i + [len(l)

我想写一个包含4个变量的函数:
f(x1,x2,x3,x4)
,每个变量的维数不同

这可以通过
f(x1,x2[newaxis],x3[newaxis,newaxis],x4[newaxis,newaxis,newaxis])
实现


你知道一种更聪明的方法吗?

一种方法是重塑每个阵列,沿前导轴提供适当数量的单态维度。要在所有数组中执行此操作,我们可以使用列表理解

因此,处理一般数量的输入数组的一种方法是-

L = [x1,x2,x3,x4]
out = [l.reshape([1]*i + [len(l)]) for i,l in enumerate(L)]
样本运行-

In [186]: # Initialize input arrays
     ...: x1 = np.random.randint(0,9,(4))
     ...: x2 = np.random.randint(0,9,(2))
     ...: x3 = np.random.randint(0,9,(5))
     ...: x4 = np.random.randint(0,9,(3))
     ...: 

In [187]: A = x1,x2[None],x3[None,None],x4[None,None,None]

In [188]: L = [x1,x2,x3,x4]
     ...: out = [l.reshape([1]*i + [len(l)]) for i,l in enumerate(L)]
     ...: 

In [189]: A
Out[189]: 
(array([2, 1, 1, 1]),
 array([[8, 2]]),
 array([[[0, 3, 5, 8, 7]]]),
 array([[[[6, 7, 0]]]]))

In [190]: out
Out[190]: 
[array([2, 1, 1, 1]),
 array([[8, 2]]),
 array([[[0, 3, 5, 8, 7]]]),
 array([[[[6, 7, 0]]]])]
您正在寻找1:

例如:

>>> np.ix_([1, 2, 3], [4, 5])
(array([[1],
        [2],
        [3]]), array([[4, 5]]))

1或同等地,感谢Divakar。我要找的是类似于
f(magic(x1,x2,x3,x4))
的东西,具有自动扩散功能。不存在的竖琴…@B.M.嗯,有
np.ix_x1,x2,x3,x4)
,但它在后面的竖琴中增加了单重调暗。除此之外,我没有意识到要添加到前导轴中。
ix龃
是用python编写的,所以您可以阅读它并编写您的变体。@B.M.
np.ix龃()
对您有用吗?“我认为问题中的单体尺寸要求是针对前导轴的,这不是该函数所做的。”Divakar。你说得对,我的问题是不恰当的。
>>> np.ix_([1, 2, 3], [4, 5])
(array([[1],
        [2],
        [3]]), array([[4, 5]]))