Numpy 数组错误
Numpy Array bug
我有一个数组
array = [np.array([[0.76103773], [0.12167502]]),
np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],
[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])]
我想将它转换成一个包含 numpy ndarrays 的 numpy 对象数组。所以我尝试了,np.array(array)
、np.array(array, dtype=object)
、np.array(array, dtype=np.object)
但是他们都给出了相同的错误,ValueError: could not broadcast input array from shape (2,1) into shape (2)
。所以基本上,最终结果应该是相同的,只是最终结果的类型是一个 numpy 对象数组,而不是 python 列表。有人可以帮忙吗?
这是您要实现的目标吗?
array1 = np.array([[0.76103773], [0.12167502]])
array2 = np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])
result = np.hstack([array1,array2])
编辑:
也许是这个?
array1 = [[0.76103773], [0.12167502]]
array2 = [[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]]
result = np.array([array1,array2])
编辑 2:
好的,我们再试一次。我想就是这样了。
array1 = np.array([[0.76103773], [0.12167502]])
array2 = np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])
#solution is either
result = np.array([array1,array2.transpose()])
#or this
result2 = np.array([array1.transpose(),array2])
您的列表包含 (2,1) 和 (2,6) 形数组。
np.array
尝试从输入创建多维数组。这适用于具有匹配形状(或长度和嵌套)的输入。如果失败,它会返回创建对象 dtype 数组。
但是在输入数组的第一个维度匹配的情况下会产生这种错误。显然它已经初始化了一个 'blank' 数组,并试图将列表数组复制到其中。没看详细,不过之前看过报错信息
实际上给 np.array
一个不同大小数组的列表,强制它使用一些备份方法。所以产生一个对象数组,别人产生这种错误。如果您的列表包含形状完全相同的数组,则结果将是 3d 数组,而不是对象数组。
创建具有给定形状的对象数组的最可靠方法是对其进行初始化,然后从列表中复制。
In [66]: alist =[np.array([[0.76103773], [0.12167502]]),
...: np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],
...: [0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])]
In [67]: alist[0].shape
Out[67]: (2, 1)
In [68]: alist[1].shape
Out[68]: (2, 6)
In [69]: np.array(alist, object)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-69-261e1ad7e5cc> in <module>
----> 1 np.array(alist, object)
ValueError: could not broadcast input array from shape (2,1) into shape (2)
In [70]: arr = np.zeros(2, object)
In [71]: arr[:] = alist
In [72]: arr
Out[72]:
array([array([[0.76103773],
[0.12167502]]),
array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736,
-0.39897202],
[ 0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554,
0.59370467]])], dtype=object)
不要对对象 dtype 数组期望过高。数学是 hit-or-miss。有些东西可以工作 - 如果他们可以将操作委托给元素。其他的不行:
In [73]: arr - arr
Out[73]:
array([array([[0.],
[0.]]),
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])], dtype=object)
In [74]: np.log(arr)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-74-a67b4ae04e95> in <module>
----> 1 np.log(arr)
AttributeError: 'numpy.ndarray' object has no attribute 'log'
即使数学可行,它也不比列表理解快。事实上,对象数组的迭代比列表的迭代慢。
我有一个数组
array = [np.array([[0.76103773], [0.12167502]]),
np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],
[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])]
我想将它转换成一个包含 numpy ndarrays 的 numpy 对象数组。所以我尝试了,np.array(array)
、np.array(array, dtype=object)
、np.array(array, dtype=np.object)
但是他们都给出了相同的错误,ValueError: could not broadcast input array from shape (2,1) into shape (2)
。所以基本上,最终结果应该是相同的,只是最终结果的类型是一个 numpy 对象数组,而不是 python 列表。有人可以帮忙吗?
这是您要实现的目标吗?
array1 = np.array([[0.76103773], [0.12167502]])
array2 = np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])
result = np.hstack([array1,array2])
编辑: 也许是这个?
array1 = [[0.76103773], [0.12167502]]
array2 = [[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]]
result = np.array([array1,array2])
编辑 2:
好的,我们再试一次。我想就是这样了。
array1 = np.array([[0.76103773], [0.12167502]])
array2 = np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],[0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])
#solution is either
result = np.array([array1,array2.transpose()])
#or this
result2 = np.array([array1.transpose(),array2])
您的列表包含 (2,1) 和 (2,6) 形数组。
np.array
尝试从输入创建多维数组。这适用于具有匹配形状(或长度和嵌套)的输入。如果失败,它会返回创建对象 dtype 数组。
但是在输入数组的第一个维度匹配的情况下会产生这种错误。显然它已经初始化了一个 'blank' 数组,并试图将列表数组复制到其中。没看详细,不过之前看过报错信息
实际上给 np.array
一个不同大小数组的列表,强制它使用一些备份方法。所以产生一个对象数组,别人产生这种错误。如果您的列表包含形状完全相同的数组,则结果将是 3d 数组,而不是对象数组。
创建具有给定形状的对象数组的最可靠方法是对其进行初始化,然后从列表中复制。
In [66]: alist =[np.array([[0.76103773], [0.12167502]]),
...: np.array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736, -0.39897202],
...: [0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554, 0.59370467]])]
In [67]: alist[0].shape
Out[67]: (2, 1)
In [68]: alist[1].shape
Out[68]: (2, 6)
In [69]: np.array(alist, object)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-69-261e1ad7e5cc> in <module>
----> 1 np.array(alist, object)
ValueError: could not broadcast input array from shape (2,1) into shape (2)
In [70]: arr = np.zeros(2, object)
In [71]: arr[:] = alist
In [72]: arr
Out[72]:
array([array([[0.76103773],
[0.12167502]]),
array([[ 0.72017135, 0.1633635 , 0.39956811, 0.91484082, 0.76242736,
-0.39897202],
[ 0.38787197, -0.06179132, -0.04213892, 0.16762614, 0.05880554,
0.59370467]])], dtype=object)
不要对对象 dtype 数组期望过高。数学是 hit-or-miss。有些东西可以工作 - 如果他们可以将操作委托给元素。其他的不行:
In [73]: arr - arr
Out[73]:
array([array([[0.],
[0.]]),
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])], dtype=object)
In [74]: np.log(arr)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-74-a67b4ae04e95> in <module>
----> 1 np.log(arr)
AttributeError: 'numpy.ndarray' object has no attribute 'log'
即使数学可行,它也不比列表理解快。事实上,对象数组的迭代比列表的迭代慢。