与
foo_ok = [(30, 784), (10, 30)]
foo_bad = [(10, 784), (10, 10)]
为什么会这样
np.array([np.zeros(foo_ok[0]),np.zeros(foo_ok[1])])
工作时
np.array([np.zeros(foo_bad[0]),np.zeros(foo_bad[1])])
结果
ValueError: could not broadcast input array from shape (10,784) into shape (10)
基本上我需要使用foo = [(X, Z), (Y, X)]
形式的东西,在这种情况下Y==X
;但是拥有Y==X
会导致失败。你知道吗
根据编辑的问题编辑答案。你知道吗
基本上,问题取决于第一个轴何时与两个数组匹配。下面是一个可复制的例子:
如果我们构造前两个数组:
我们可以看到,得到的数组并不相同:
这里
foo_ok2[0]
和foo_ok2[1]
具有相同的值,因此,它将创建两个形状相同的数组。Numpy足够聪明,可以在两个维度相同的数组出现时处理数组连接,结果b
数组是形状(2, 30, 784)
的连接。但是,得到的数组a
只是一个object
类型的数组,包含2个元素。列表中的每个元素都是一个不同的数组(就像它是一个原始python列表一样)。你知道吗Numpy没有针对
object
数组进行优化,因此,只要可能,它都会尝试将数组转换为数值数据类型。你知道吗这就是2个数组的第一个维度在
c
中匹配的情况。Numpy期望所有维度都匹配,因此抛出I cannot concatenate this
异常。你知道吗尽管我仍然鼓励不要在对象类型中使用numpy数组,但是有一种方法可以创建一个,即使第一个轴匹配,而数组有不同的形状:
以及它的另一个版本(与您的语法密切相关):
相关问题 更多 >
编程相关推荐