元素与numpy.array和标量的组合

时间:2015-03-18 12:44:02

标签: python numpy

我有tuple,其中包含numpy.array任意长度以及标量。像这样:

(array([ 31.5,  31.6,  31.7,  31.8,  31.9,  32. ,  32.1,  32.2,  32.3,
    32.4,  32.5,  32.6,  32.7,  32.8,  32.9,  33. ,  33.1,  33.2,
    33.3,  33.4,  33.5,  33.6,  33.7,  33.8,  33.9,  34. ,  34.1,
    34.2,  34.3,  34.4,  34.5,  34.6,  34.7,  34.8,  34.9,  35. ,
    35.1,  35.2]), 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0)

我的结果需要将numpy.array的每个元素与tuple中的所有其他元素配对。挑战是numpy.array出现在元组中的任意位置,这样我就无法使用保证索引。

结果需要是tuple s的可迭代(最好是numpy.array),如下所示:

(array([31.5, 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0]),
array([31.6, 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0]),
array([31.7, 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0]),
array([31.8, 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0]),
...
)

我尝试了herehere以及itertools.product提供的解决方案。 SE解决方案假定两个独立的阵列,itertools.product也不是正确的解决方案。

3 个答案:

答案 0 :(得分:2)

如果您不知道array的位置,您只需要找到它。我只想按如下方式编写代码:

from numpy import array, ndarray

a = (array([ 31.5,  31.6,  31.7,  31.8,  31.9,  32. ,  32.1,  32.2, 32.3,
    32.4,  32.5,  32.6,  32.7,  32.8,  32.9,  33. ,  33.1,  33.2,
    33.3,  33.4,  33.5,  33.6,  33.7,  33.8,  33.9,  34. ,  34.1,
    34.2,  34.3,  34.4,  34.5,  34.6,  34.7,  34.8,  34.9,  35. ,
    35.1,  35.2]), 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0)

for i, aa in enumerate(a):
    if isinstance(aa, ndarray):
        break

t = tuple(s for j, s in enumerate(a) if j != i)

newlist = []
for aa in a[i]:
    newlist.append(array((aa,) + t)))
result = tuple(newlist)

答案 1 :(得分:1)

import numpy as np
x = (np.array([ 31.5,  31.6,  31.7,  31.8,  31.9,  32. ,  32.1,  32.2,  32.3,
    32.4,  32.5,  32.6,  32.7,  32.8,  32.9,  33. ,  33.1,  33.2,
    33.3,  33.4,  33.5,  33.6,  33.7,  33.8,  33.9,  34. ,  34.1,
    34.2,  34.3,  34.4,  34.5,  34.6,  34.7,  34.8,  34.9,  35. ,
    35.1,  35.2]), 30.0, 0.0025, 0.0, 0.0027, 0.2791, 1.5, 1.0, 100.0)


components = sorted(x, key=lambda xi: np.isscalar(xi))
prefixes = components[0]
suffix = components[1:]
result = tuple(np.array([xi]+suffix) for xi in x)

答案 2 :(得分:1)

如果您确定您的元组只包含一个np.Array

,这是另一种方法
C = [z for z in A if type(z) is not np.ndarray]
B = np.array([np.append(y,C) for y in [np.nditer(x) for x in A if type(x) is np.ndarray][0]]) 
#B can be a tuple or a list