Why does a cartesian product yield "TypeError: iteration over a 0-d array"?
Why does a cartesian product yield "TypeError: iteration over a 0-d array"?
我正在尝试从数组列表中生成笛卡尔积,但它一直给我 TypeError: iteration over a 0-d array
我有一个如下所示的列表:
print(a)
>>>[array([1., 2.]), array([3., 4.]), array(1400.)]
现在,当我尝试做的时候:
b=list(itertools.product(*a))
>>>TypeError: iteration over a 0-d array
我错过了什么?
正如@user2357112 在评论中所解释的那样,您当前将最后一个元素作为 0 维数组。如果你检查它的长度,你会得到 TypeError: len() of unsized object
。为了使您的解决方案正常工作,您需要使用 []
将元素包含在最后一个数组中,以便能够使用 product
import itertools
a = [np.array([1., 2.]), np.array([3., 4.]), np.array([1400.])]
b = list(itertools.product(*a))
#[(1.0, 3.0, 1400.0),
# (1.0, 4.0, 1400.0),
# (2.0, 3.0, 1400.0),
# (2.0, 4.0, 1400.0)]
编辑 根据要求回答第二个问题:
import itertools
dict1 = {'wdth_i': ['1', '2'], 'wdth_p': ['3', '4'], 'mu': '1400'}
a = []
for i in dict1.values():
if isinstance(i, list):
a.append(i)
else:
a.append([i])
f = list(itertools.product(*a))
# [('1', '3', '1400'),
# ('1', '4', '1400'),
# ('2', '3', '1400'),
# ('2', '4', '1400')]
我正在尝试从数组列表中生成笛卡尔积,但它一直给我 TypeError: iteration over a 0-d array
我有一个如下所示的列表:
print(a)
>>>[array([1., 2.]), array([3., 4.]), array(1400.)]
现在,当我尝试做的时候:
b=list(itertools.product(*a))
>>>TypeError: iteration over a 0-d array
我错过了什么?
正如@user2357112 在评论中所解释的那样,您当前将最后一个元素作为 0 维数组。如果你检查它的长度,你会得到 TypeError: len() of unsized object
。为了使您的解决方案正常工作,您需要使用 []
将元素包含在最后一个数组中,以便能够使用 product
import itertools
a = [np.array([1., 2.]), np.array([3., 4.]), np.array([1400.])]
b = list(itertools.product(*a))
#[(1.0, 3.0, 1400.0),
# (1.0, 4.0, 1400.0),
# (2.0, 3.0, 1400.0),
# (2.0, 4.0, 1400.0)]
编辑 根据要求回答第二个问题:
import itertools
dict1 = {'wdth_i': ['1', '2'], 'wdth_p': ['3', '4'], 'mu': '1400'}
a = []
for i in dict1.values():
if isinstance(i, list):
a.append(i)
else:
a.append([i])
f = list(itertools.product(*a))
# [('1', '3', '1400'),
# ('1', '4', '1400'),
# ('2', '3', '1400'),
# ('2', '4', '1400')]