Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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,原始数据 [[ 0.00000000e+00 1.00000000e+00 -6.76207728e+00 -1.63236398e+01] [ 0.00000000e+00 1.00000000e+00 2.51283367e+01 1.13952157e+02] [ 0.00000000e+00 1.00000000e+00 3.11402956e+00 -5.16009612e+02] [ 0.00000000e+00 1.00000000e+00 3.109697

原始数据

 [[ 0.00000000e+00  1.00000000e+00 -6.76207728e+00 -1.63236398e+01]
 [ 0.00000000e+00  1.00000000e+00  2.51283367e+01  1.13952157e+02]
 [ 0.00000000e+00  1.00000000e+00  3.11402956e+00 -5.16009612e+02]
 [ 0.00000000e+00  1.00000000e+00  3.10969787e+01  1.82175649e+02]
 [ 1.00000000e+00 -2.31269114e+00 -4.13720127e+02  3.55395844e+03]
 [ 1.00000000e+00  4.54598490e+01  6.19694322e+02  2.61091335e+03]
 [ 1.00000000e+00  7.36925014e-01 -4.49386738e+02 -1.22392549e+03]
 [ 1.00000000e+00  3.29511609e+00 -4.43413555e+02 -4.12677155e+03]]
我试着用下面这首颂歌去掉零

def removeZeroPadding(X):
  res = []
  for poly in enumerate(X):
      tmp = poly[1]
      tmp = tmp[tmp != 0]
      res.append(tmp)
  return res
这转化为

[array([  1.        ,  -6.76207728, -16.32363975]), array([  1.        ,  25.1283367 , 113.95215706]), array([   1.        ,    3.11402956, -516.0096117 ]), array([  1.        ,  31.09697873, 182.17564943]), array([ 1.00000000e+00, -2.31269114e+00, -4.13720127e+02,  3.55395844e+03]), array([1.00000000e+00, 4.54598490e+01, 6.19694322e+02, 2.61091335e+03]), array([ 1.00000000e+00,  7.36925014e-01, -4.49386738e+02, -1.22392549e+03]), array([ 1.00000000e+00,  3.29511609e+00, -4.43413555e+02, -4.12677155e+03])]
如何保持原始数据的结构不带零?谢谢

编辑:应该是这样的

 [[ 1.00000000e+00 -6.76207728e+00 -1.63236398e+01]
 [ 1.00000000e+00  2.51283367e+01  1.13952157e+02]
 [ 1.00000000e+00  3.11402956e+00 -5.16009612e+02]
 [ 1.00000000e+00  3.10969787e+01  1.82175649e+02]
 [ 1.00000000e+00 -2.31269114e+00 -4.13720127e+02  3.55395844e+03]
 [ 1.00000000e+00  4.54598490e+01  6.19694322e+02  2.61091335e+03]
 [ 1.00000000e+00  7.36925014e-01 -4.49386738e+02 -1.22392549e+03]
 [ 1.00000000e+00  3.29511609e+00 -4.43413555e+02 -4.12677155e+03]]
看一看


它将避免for循环

似乎您不希望数组列表作为输出,而是希望使用二维数组(即
[…]]
而不是
[array([…])、array([…])]

但是,这是不可能的,因为在通过删除零(即,某些行最终有3个元素,而另一些行有4个元素)对其进行修剪后,数组中的行最终具有不同的大小。如果希望它是单个数组,就像数学中的矩阵一样,所有列(和所有行)都需要具有相同数量的元素


作为替代方案,您可以为要修剪的元素指定一个不同的值,例如,
None
,或者您也可以。

您所寻求的基本上是不可能的。您不能同时从每一行中删除可变数量的条目,同时保证每一行具有相同数量的条目(这是获得
[[…]]
类型的
ndarray
所必需的)。对此进行了更详细的解释

以下函数将从每行的左侧和右侧删除
0
-项,但返回的类型为
[array([…])、array([…])]

def trim_zero_行(ndarr):
返回np.array([ndarr中的行的np.trim_零(行)])
打印(按行修剪零)(np.数组([[0,0,1,0.]),
[2., 3., 4., 0.]])))
印刷品:

[数组([1.])数组([2,3,4.])]

Numpy提供了一种修剪方法你想要什么来代替零?试试这个,
arr[arr!=0]
你想要查找由所有0组成的列并删除它们吗?使用“保留结构”,你的意思是你想要保留数组的初始维度(例如,在你的示例中是4乘6)?如果是,什么值应该代替零?无?