Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 取消numpy阵列的形状和形状?_Python_Numpy - Fatal编程技术网

Python 取消numpy阵列的形状和形状?

Python 取消numpy阵列的形状和形状?,python,numpy,Python,Numpy,我有一个56个图像阵列,每个图像有2个像素通道。因此,它的形状是(1200、800、52、2)。我需要做一个Kneighbors分类器,它需要被展平,以便所有52幅图像中的所有像素都在一列中。如此形状(1200*800*52,2)。然后,在分类完成后,我需要知道我可以按照正确的顺序取消它们的形状 作为第一步,我尝试对同一阵列进行取消形状和重塑,并尝试使其与原始阵列相同 以下是我尝试过但似乎不起作用的方法: In [55]: Y.shape Out[55]: (1200, 800, 2, 52)

我有一个56个图像阵列,每个图像有2个像素通道。因此,它的形状是(1200、800、52、2)。我需要做一个Kneighbors分类器,它需要被展平,以便所有52幅图像中的所有像素都在一列中。如此形状(1200*800*52,2)。然后,在分类完成后,我需要知道我可以按照正确的顺序取消它们的形状

作为第一步,我尝试对同一阵列进行取消形状和重塑,并尝试使其与原始阵列相同

以下是我尝试过但似乎不起作用的方法:

In [55]: Y.shape
Out[55]: (1200, 800, 2, 52)

In [56]: k = np.reshape(Y,(1200*800*52,2))

In [57]: k.shape
Out[57]: (49920000, 2)

In [58]: l = np.reshape(k,(1200,800,52,2))

In [59]: l.shape
Out[59]: (1200, 800, 52, 2)

In [60]: assert l == Y
/Users/alex/anaconda2/bin/ipython:1: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
  #!/bin/bash /Users/alex/anaconda2/bin/python.app
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-60-9faf5e8e20ba> in <module>()
[55]中的
:Y形
Out[55]:(1200、800、2、52)
[56]:k=np.重塑(Y,(1200*800*52,2))
In[57]:k.形状
Out[57]:(49920000,2)
在[58]中:l=np.重塑(k,(1200800,52,2))
在[59]中:l形
Out[59]:(1200800,52,2)
在[60]中:断言l==Y
/Users/alex/anaconda2/bin/ipython:1:DeprecationWarning:elementwise==比较失败;这将在将来引发错误。
#!/bin/bash/Users/alex/anaconda2/bin/python.app
---------------------------------------------------------------------------
AssertionError回溯(上次最近的调用)
在()
编辑:我在k和Y的形状中出错。这是更正的版本,但仍然有一个错误

In [78]: Y.shape
Out[78]: (1200, 800, 2, 52)

In [79]: k = np.reshape(Y,(1200*800*52,2))

In [80]: k.shape
Out[80]: (49920000, 2)

In [81]: l = np.reshape(k,(1200,800,2,52))

In [82]: assert Y == l
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-82-6f6815930213> in <module>()
----> 1 assert Y == l

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
[78]中的
:Y形
Out[78]:(1200、800、2、52)
[79]:k=np.重塑(Y,(1200*800*52,2))
In[80]:k.形状
出[80]:(49920000,2)
在[81]中:l=np.重塑(k,(1200800,2,52))
在[82]中:断言Y==l
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1断言Y==l
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

看起来您的错误出现在第56行,您使用的
整形
不遵循
Y
的原始尺寸(最后一个轴是52,但整形为2)

也许你应该试试

k = np.reshape(Y,(1200*800*2,52))
因为它似乎更好地反映了“52个展平图像”的概念。

(Y==l)
是一个与
Y
l
形状相同的布尔数组

assert expression
在布尔上下文中计算
expression
。换句话说,将调用
表达式

通过设计,
ndarray.\uu bool\uu
方法提高了

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
因为不清楚当所有元素都为
时,或者当任何元素都为
时,
是否应返回

根据您的意图,您可以通过调用
all
any
方法来避免错误。在您的情况下,您希望断言所有值都是相等的:

assert (Y == l).all()

由于浮点运算的不精确性,比较浮点数是否相等有时会返回意外的结果,因此使用

assert np.allclose(Y, l)
请注意,接受相对公差和绝对公差参数
处理浮点不精确。

Y
具有形状
(1200,800,2,52)
,但
l
具有形状
(1200,800,52,2)
这两个形状不相等,因为形状不匹配。我已经更新了问题和代码。发生了另一个错误,但重塑似乎仍然无法正常工作。我需要展平像素值。“2”表示a和b颜色通道。我想在这种情况下,这是不可能的。这是正确的。我想在我的例子中加上,Y=np。转置(Y,(3,0,1,2))来生成形状(521200800,2)。这对我来说更直观,因为52个案例中有1200行800列,每个通道2个。那么.any、.all和.allclose都可以