ValueError: could not broadcast input array from shape (49041,4) into shape (49041)
ValueError: could not broadcast input array from shape (49041,4) into shape (49041)
这是我的代码。
我越来越广泛 error.I 无法理解为什么?我已经查看了其他类似的问题,这些问题谈到了尺寸问题,但我无法找到 problem.Any 帮助表示赞赏。
提前致谢。
我附上了图片。
Broadcast error
两个数组(ns 和 X_train_grade_encoded)的形状相同,但有错误,为什么?
所以我看了你的笔记本图片。这是一个需要缩放才能阅读的小 png。我们强烈鼓励,有些人甚至要求您复制粘贴代码和错误。我们需要看到问题,就在前面,而不是隐藏的。否则我们可能会转到下一个问题。
broadcast
错误通常发生在对两个数组进行某种数学运算时,或者(我的第二个猜测)将一个数组分配给另一个数组的一部分时。但是这个案例比较晦涩,它试图从 (n,4) 和 (n,300) 形状的数组中创建一个对象 dtype 数组。
您正在做 hstack((ns, array2))
。使用普通的 np.hstack
可以工作并产生 (n, 304) 形状的数组。但是你正在使用 scipy.sparse.hstack
。我不知道那是故意的还是错误的。您没有暗示您正在处理 sparse
矩阵。
ns
可能是从稀疏矩阵构造的,因为您使用 toarray()
。但它现在是一个密集的(numpy)数组。
sparse.hstack
适用于稀疏矩阵,返回稀疏矩阵。我不知道使用密集数组输入的确切限制。我相信它可以将密集转换为 coo
稀疏,然后进行连接,但这里的错误发生在它到达那一步之前。
这重现了您的错误:
In [37]: from scipy import sparse
尝试在两个密集数组上使用稀疏 hstack:
In [38]: sparse.hstack([np.ones((3,4)),np.zeros((3,2))])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-38-a9d8036b5a44> in <module>
----> 1 sparse.hstack([np.ones((3,4)),np.zeros((3,2))])
/usr/local/lib/python3.6/dist-packages/scipy/sparse/construct.py in hstack(blocks, format, dtype)
463
464 """
--> 465 return bmat([blocks], format=format, dtype=dtype)
466
467
/usr/local/lib/python3.6/dist-packages/scipy/sparse/construct.py in bmat(blocks, format, dtype)
543 """
544
--> 545 blocks = np.asarray(blocks, dtype='object')
546
547 if blocks.ndim != 2:
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
83
84 """
---> 85 return array(a, dtype, copy=False, order=order)
86
87
ValueError: could not broadcast input array from shape (3,4) into shape (3)
但是如果我们首先将一个(甚至是第二个)转换为稀疏:
In [39]: sparse.hstack([np.ones((3,4)),sparse.coo_matrix(np.zeros((3,2)))])
Out[39]:
<3x6 sparse matrix of type '<class 'numpy.float64'>'
with 12 stored elements in COOrdinate format>
In [40]: _.A
Out[40]:
array([[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.]])
当然是连接两个密集数组的正确方法:
In [41]: np.hstack([np.ones((3,4)),np.zeros((3,2))])
Out[41]:
array([[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.]])
array(...,object)
错误有点晦涩;它的出现是因为两个数组都是密集的并且具有相同的第一维。这是 numpy
中的一个已知问题。由于 sparse.hstack
旨在用于稀疏矩阵,因此可以原谅其开发人员忽略此 numpy
误用。
===
sparse.vstack
确实适用于密集数组,形状如 (3,4) 和 (5,4),因为 np.array(..., object)
确实生成了有效的对象 dtype 数组。但是如果形状匹配,例如(3,4)和(3,4),hstack
和vstack
都不行,但是报错信息和你的不一样。
In [66]: sparse.hstack((np.ones((3,2)),np.zeros((3,2))))
...
ValueError: blocks must be 2-D
所以我们需要认真对待文档。
这是我的代码。 我越来越广泛 error.I 无法理解为什么?我已经查看了其他类似的问题,这些问题谈到了尺寸问题,但我无法找到 problem.Any 帮助表示赞赏。 提前致谢。 我附上了图片。 Broadcast error
两个数组(ns 和 X_train_grade_encoded)的形状相同,但有错误,为什么?
所以我看了你的笔记本图片。这是一个需要缩放才能阅读的小 png。我们强烈鼓励,有些人甚至要求您复制粘贴代码和错误。我们需要看到问题,就在前面,而不是隐藏的。否则我们可能会转到下一个问题。
broadcast
错误通常发生在对两个数组进行某种数学运算时,或者(我的第二个猜测)将一个数组分配给另一个数组的一部分时。但是这个案例比较晦涩,它试图从 (n,4) 和 (n,300) 形状的数组中创建一个对象 dtype 数组。
您正在做 hstack((ns, array2))
。使用普通的 np.hstack
可以工作并产生 (n, 304) 形状的数组。但是你正在使用 scipy.sparse.hstack
。我不知道那是故意的还是错误的。您没有暗示您正在处理 sparse
矩阵。
ns
可能是从稀疏矩阵构造的,因为您使用 toarray()
。但它现在是一个密集的(numpy)数组。
sparse.hstack
适用于稀疏矩阵,返回稀疏矩阵。我不知道使用密集数组输入的确切限制。我相信它可以将密集转换为 coo
稀疏,然后进行连接,但这里的错误发生在它到达那一步之前。
这重现了您的错误:
In [37]: from scipy import sparse
尝试在两个密集数组上使用稀疏 hstack:
In [38]: sparse.hstack([np.ones((3,4)),np.zeros((3,2))])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-38-a9d8036b5a44> in <module>
----> 1 sparse.hstack([np.ones((3,4)),np.zeros((3,2))])
/usr/local/lib/python3.6/dist-packages/scipy/sparse/construct.py in hstack(blocks, format, dtype)
463
464 """
--> 465 return bmat([blocks], format=format, dtype=dtype)
466
467
/usr/local/lib/python3.6/dist-packages/scipy/sparse/construct.py in bmat(blocks, format, dtype)
543 """
544
--> 545 blocks = np.asarray(blocks, dtype='object')
546
547 if blocks.ndim != 2:
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
83
84 """
---> 85 return array(a, dtype, copy=False, order=order)
86
87
ValueError: could not broadcast input array from shape (3,4) into shape (3)
但是如果我们首先将一个(甚至是第二个)转换为稀疏:
In [39]: sparse.hstack([np.ones((3,4)),sparse.coo_matrix(np.zeros((3,2)))])
Out[39]:
<3x6 sparse matrix of type '<class 'numpy.float64'>'
with 12 stored elements in COOrdinate format>
In [40]: _.A
Out[40]:
array([[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.]])
当然是连接两个密集数组的正确方法:
In [41]: np.hstack([np.ones((3,4)),np.zeros((3,2))])
Out[41]:
array([[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.],
[1., 1., 1., 1., 0., 0.]])
array(...,object)
错误有点晦涩;它的出现是因为两个数组都是密集的并且具有相同的第一维。这是 numpy
中的一个已知问题。由于 sparse.hstack
旨在用于稀疏矩阵,因此可以原谅其开发人员忽略此 numpy
误用。
===
sparse.vstack
确实适用于密集数组,形状如 (3,4) 和 (5,4),因为 np.array(..., object)
确实生成了有效的对象 dtype 数组。但是如果形状匹配,例如(3,4)和(3,4),hstack
和vstack
都不行,但是报错信息和你的不一样。
In [66]: sparse.hstack((np.ones((3,2)),np.zeros((3,2))))
...
ValueError: blocks must be 2-D
所以我们需要认真对待文档。