为什么在创建不规则数组但仅针对特定形状时会出现值错误?

问题描述 投票:0回答:1
import numpy as np

for h in range(10):
    try:
        array = np.array([np.zeros((h, 4)), np.zeros((3, h))], dtype=object)
    except ValueError:
        print(f'Value Error for h={h} only.')

在上面的代码中,

ValueError
仅发生在
h=3
。这看起来很随意。

完整的错误是,

  File "path/to/arr.py", line 4, in <module>
    array = np.array([np.zeros((h, 4)), np.zeros((3, h))], dtype=object)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not broadcast input array from shape (3,4) into shape (3,)

如何避免这种情况以及为什么会发生这种情况?

python numpy
1个回答
0
投票
  • 当您在
    numpy
    中创建数组的数组时,如果可能,它会尝试将它们组合成常规的多维数组。
  • h=3
    ,两个数组碰巧具有相同的行数。
    • 第一个数组:(3,4)
    • 第二个数组:(3,3)
  • 所以
    numpy
    认为你可能想要堆叠这些数组,但它们的列大小4和3不匹配,导致
    ValueError
  • 对于 h 的其他值,数组中的行数不同,因此它不会尝试堆叠它们。
  • 我们需要通过创建一个空对象数组并单独分配数组来显式地将每个数组作为单独的对象传递,因此
    numpy
    不会组合数组。
import numpy as np

for h in range(10):
    array = np.empty(2, dtype=object)
    array[0] = np.zeros((h, 4))
    array[1] = np.zeros((3, h))
© www.soinside.com 2019 - 2024. All rights reserved.