在 Numpy 中管理高维度
Managing high dimensions in Numpy
我想编写一个包含 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]]]])]
您正在寻找 np.ix_
1:
f(*np.ix_(x1, x2, x3, x4))
例如:
>>> np.ix_([1, 2, 3], [4, 5])
(array([[1],
[2],
[3]]), array([[4, 5]]))
我想编写一个包含 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]]]])]
您正在寻找 np.ix_
1:
f(*np.ix_(x1, x2, x3, x4))
例如:
>>> np.ix_([1, 2, 3], [4, 5])
(array([[1],
[2],
[3]]), array([[4, 5]]))