python - Numpy:无法将输入数组从形状(3)广播到形状(1)
问题描述
我想创建一个 numpy 数组b ,其中每个组件都是一个二维矩阵,其维度由向量a的坐标确定。
我得到以下满足我的条件:
>>> a = [3,4,1]
>>> b = [np.zeros((a[i], a[i - 1] + 1)) for i in range(1, len(a))]
>>> np.array(b)
array([ array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]),
array([[ 0., 0., 0., 0., 0.]])], dtype=object)
但是如果我发现了这种不起作用的病态情况:
>>> a = [2,1,1]
>>> b = [np.zeros((a[i], a[i - 1] + 1)) for i in range(1, len(a))]
>>> b
[array([[ 0., 0., 0.]]), array([[ 0., 0.]])]
>>> np.array(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (3) into shape (1)
解决方案
我将提出问题的解决方案,但请考虑评论中所说的内容。拥有未对齐的 Numpy 数组会阻止大多数有用的操作发挥它们的魔力。考虑改用列表。
话虽如此,确实是奇怪的错误。我通过在基本的 for 循环中分配而不是使用np.array
调用来完成工作。
a = [2,1,1]
b = np.zeros(len(a)-1, dtype=object)
for i in range(1, len(a)):
b[i-1] = np.zeros((a[i], a[i - 1] + 1))
结果:
>>> b
array([array([[0., 0., 0.]]), array([[0., 0.]])], dtype=object)
推荐阅读
- javascript - 实现 javascript promise 的最佳实践
- ios - UIAlertController 未显示在模态 UIViewController 上?
- java - Spring @Service 与对象服务
- python - Django - 在 POST 请求上发送 JSON 数组
- python - 如何从外部访问类的局部变量?Python
- javascript - 仅使用 javascript 对 html 中的表格进行排序
- spring - 如何在java中上传文档列表
- spring-boot - 与 restTemplate getforObject() 一起使用时,jackson-data-format 不会转换
- jenkins-pipeline - 如何从 Jenkins 共享库运行 vars/script.groovy
- wordpress - Dokan 插件定制