我有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]),
...
)
我尝试了here和here以及itertools.product
提供的解决方案。 SE解决方案假定两个独立的阵列,itertools.product
也不是正确的解决方案。
答案 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