为什么笛卡尔积会产生“ TypeError:在0维数组上的迭代”?

哈莎德·苏迪(Harshad Surdi)

我正在尝试从数组列表中制作笛卡尔积,但是它一直在给我一个 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')]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章