python - 为什么笛卡尔积会产生“TypeError:0-d 数组上的迭代”?
问题描述
我正在尝试从数组列表中制作笛卡尔积,但它一直给我一个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')]
推荐阅读
- reactjs - 如何处理 axios 错误并显示带有错误消息的模态
- c# - C# 应用程序仅在工作区文件夹中工作
- javascript - 以 navigator.userAgent 为例的 JavaScript 箭头函数
- java - 在子类中获取私有访问错误
- c# - Unity 中的我的 GameObject(Sword) 未绑定到 Player (AnotherGameObject)。它停留在 (0f, 0f, 0f)
- firebase - 如何从 firebase 颤振中获取 fieldValue.arrayUnion 数据
- xaml - UWP WebView 导致异常
- python - 如何在matplotlib条形图中用希腊符号替换主轴和次轴的图例标签?
- arduino - 使用 VSCode+PlatformIO 上传的代码的执行速度比使用 Arduino IDE 慢得多
- java - 使用 MessageBird RequestSigner 时请求始终无效