python - Numpy:无法将输入数组从形状 (3) 广播到形状 (1)

标签 python numpy

我想创建一个 numpy 数组 b,其中每个组件都是一个二维矩阵,其维度由向量 a< 的坐标确定/em>

我所做的以下事情令我满意:

>>> 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)

关于python - Numpy:无法将输入数组从形状 (3) 广播到形状 (1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429579/

相关文章:

python - numpy 日期问题 - 将浮点年周格式转换为 numpy 的日期格式

python - 如何通过重新排序 reshape numpy 数组?

python - Pandas DataFrame 中列的值列表

python - 如何在 Python 3 中将原始十六进制字节写入标准输出?

python - 将 Spark Structure Streaming DataFrames 转换为 Pandas DataFrame

python - 获取数组中匹配元素的索引,考虑重复

Python numpy 将二维数组转换为已排序的一维数组

python - 循环数据时的高效 netCDF 分析

c++ - 在 C++ 中嵌入 matplotlib

Python/Numpy 子数组选择