就我而言,有两个数组或X = np.arange(n)。
如何得到作为numPy中的二维数组?
在 numpy 中,这将是一个数组np.shape(Y)=(n,n,2)。
就我而言,有两个数组或X = np.arange(n)。
如何得到作为numPy中的二维数组?
在 numpy 中,这将是一个数组np.shape(Y)=(n,n,2)。
你想要meshgrid()。这是一个简单的例子:
In [14]: a = arange(5)
In [18]: r = array(meshgrid(a,a))
In [20]: r.shape
Out[20]: (2, 5, 5)
In [21]: r
Out[21]:
array([[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]],
[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]]])
由于那里有很多重复值,您可以使用 sparse=True 命令调用它来保存 mem 并利用一些 ndarray 技巧。
如果你真的想要 (i,j) 的一些简单函数,你可以使用以下技巧来避免形成 immidiate。我一直在使用它,但在其他任何链接中都没有看到:
In [3]: a = arange(5)
In [4]: a[:,newaxis] * a[newaxis,:]
Out[4]:
array([[ 0, 0, 0, 0, 0],
[ 0, 1, 2, 3, 4],
[ 0, 2, 4, 6, 8],
[ 0, 3, 6, 9, 12],
[ 0, 4, 8, 12, 16]])
该示例使用乘法,但任何数量的二进制函数都可以放在那个地方。由于广播规则,这个技巧也适用于更高的维度:
In [6]: a = ones((2,5))
In [7]: a[:,newaxis] * a[newaxis,:]
Out[7]:
array([[[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]],
[[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]]])
In [8]: a.shape
Out[8]: (2, 5)
In [9]: b = a[:,newaxis] * a[newaxis,:]
In [10]: b.shape
Out[10]: (2, 2, 5)
您可以使用 itertools.product:
>>> from numpy import *
>>> import itertools
>>> array([x for x in itertools.product(arange(2), arange(3))])
array([[0, 0],
[0, 1],
[0, 2],
[1, 0],
[1, 1],
[1, 2]])
import numpy as np
def cartesian_cross_product(x,y):
cross_product = np.transpose([np.tile(x, len(y)),np.repeat(y,len(x))])
return cross_product