Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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
为数组的索引实现np.subtract.outer([[array….python中的结构_Python_Arrays_Numpy_Scipy - Fatal编程技术网

为数组的索引实现np.subtract.outer([[array….python中的结构

为数组的索引实现np.subtract.outer([[array….python中的结构,python,arrays,numpy,scipy,Python,Arrays,Numpy,Scipy,我有以下一组指数 ind = array([[array([0, 1, 4])], [array([0, 1, 2, 5])], [array([1, 2, 3, 6])], [array([2, 3, 7])], [array([0, 4, 5, 8])], [array([1, 4, 5, 6, 9])], [array([ 2, 5, 6, 7, 10]

我有以下一组指数

ind = array([[array([0, 1, 4])],
           [array([0, 1, 2, 5])],
           [array([1, 2, 3, 6])],
           [array([2, 3, 7])],
           [array([0, 4, 5, 8])],
           [array([1, 4, 5, 6, 9])],
           [array([ 2,  5,  6,  7, 10])],
           [array([ 3,  6,  7, 11])],
           [array([ 4,  8,  9, 12])],
           [array([ 5,  8,  9, 10, 13])],
           [array([ 6,  9, 10, 11, 14])],
           [array([ 7, 10, 11, 15])],
           [array([ 8, 12, 13])],
           [array([ 9, 12, 13, 14])],
           [array([10, 13, 14, 15])],
           [array([11, 14, 15])]])
如下图所示,
X

X = array([[ 0.        ,  0.        ],
           [ 0.33333333,  0.        ],
           [ 0.66666667,  0.        ],
           [ 1.        ,  0.        ],
           [ 0.        ,  0.33333333],
           [ 0.33333333,  0.33333333],
           [ 0.66666667,  0.33333333],
           [ 1.        ,  0.33333333],
           [ 0.        ,  0.66666667],
           [ 0.33333333,  0.66666667],
           [ 0.66666667,  0.66666667],
           [ 1.        ,  0.66666667],
           [ 0.        ,  1.        ],
           [ 0.33333333,  1.        ],
           [ 0.66666667,  1.        ],
           [ 1.        ,  1.        ]])
是否有一种不使用
forloop
获得以下矩阵的有效方法

A = [X[0,0]-X[0,0]  X[0,0]-X[1,0]  X[0,0]-X[4,0]
    X[1,0]-X[0,0]  X[1,0]-X[1,0]  X[1,0]-X[2,0] X[1,0]-X[5,0]
    X[2,0]-X[1,0]  X[2,0]-X[2,0]  X[2,0]-X[3,0] X[2,0]-X[6,0] 
    ...
    ...
    ...
   X[15,0]-X[11,0] X[15,0]-X[14,0] X[15,0]-X[15,0] ]
我已经试过np.subtract.outer和np.subtract了。
ind
结构很难使用(就简单地使用
X[ind,0]
来说)。我宁愿不改变
ind
结构。寻找一种不使用
forloop
来实现矩阵
a
的切割器方法


感谢您的帮助

如果您将索引数组转换为:

ind = ind.flatten()
您可以通过以下方式获得您想要的:

a = X[:,0]
ans = [np.ones(len(i))*a[0]-a[i] for i in ind]
对于
ind
的原始定义,必须使用
i[0]


编辑:这可以改进为(根据@Jaime的建议):


最后一行不是
X[15,0]-X[11,0]X[15,0]-X[14,0]X[15,0]-X[15,0]-X[15,0]
是的,很抱歉输入了
[a[0]-a[i]表示ind中的i]
或者
a-[i]表示ind中的i]
都是相同的,而且更干净(可能)更快。问题是重写
ind
。因为
ind
是给出该结构的函数的结果。否则,正如您所指出的,这要简单得多。如果
ind
更改了结构,您可以简单地使用
np.subtract.outer
@madf19请检查我添加的编辑,其中添加了如何转换您的属性
ind
数组的扁平化格式可能会让你的生活更轻松……
ind.flatte()
对于
数组([[array(…
)不起作用。这正是我试图通过将
ind
的格式更改为类似
(array(…)、array(…)的格式,以非常有效的方式做的事情
由python中的一些内置函数实现。还希望在python中使用一些函数中的biult,例如'np.subtract.outer'。ind和X非常大,顺序为10**6,使用forloop不是一个好方法option@Jaime谢谢你的帮助。让我重新表述一下我的问题,让我说说不使用for转换<代码的最有效的方法是什么>ind=array([[array([0,1,4])],[array([0,1,2,5])],[array([1,2,3,6]),[array([2,3,7]),[array([0,4,5,8]),[array([1,4,5,6,9]),[array([2,5,6,7,10])to
(array>)([0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,6,7,8,0,1,2,3,4,5,6,7,8]),数组([0,3,1,1,2,0,2,5,1,3,4,0,4,3,1,5,2,4,6,7,7,6,4,8,2,5])
ans = [a[0] - a[i] for i in ind]