Python-创建归约数组

时间:2018-07-25 13:44:12

标签: python arrays numpy

我有一个具有以下数组的数据库:

array = np.array([[1,4,1,1,0,0],[4,5,6,3,0,0],[1,4,5,6,0,0]])

我正在使用列中的数据,例如:

array[:,2]

out: array([1, 6, 5])

我想创建一个不包含0列的新数组

为此,我创建了一个零数组:

array_zero = np.zeros((3,6))

然后,我将每个索引与此数组进行比较:

index = 0
while (array[:,index] != array_zero[:,0]):
    index = index + 1

当第一列的索引为0时,我知道接下来的列将为0列。

所以,我想像这样创建我的新数组:

array_new = np.array(3,index + 1)

for i in range(index+ 1):
    array_new[:,i] = array[:,i]

在while循环中,出现以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我尝试了以下操作:

while ((array[:,index] != array_zero[:,0]).all):
    index = index + 1

while ((array[:,index] != array_zero[:,0]).any):
    index = index + 1

我有以下错误:

IndexError: index 6 is out of bounds for axis 1 with size 6

代码如下:

import numpy as np

index = 0

array = np.array([[1,4,1,1,0,0],[4,5,6,3,0,0],[1,4,5,6,0,0]])

array_zero = np.zeros((3,6))


while (array[:,index] != array_zero[:,0]):
    index = index + 1

array_new = np.array(3,index + 1)

for i in range(index+ 1):
    array_new[:,i] = array[:,i]

谢谢您的帮助

2 个答案:

答案 0 :(得分:4)

您可能希望我们进一步了解Numpy的内部功能:

a = np.array([[1,4,1,1,0,0],[4,5,6,3,0,0],[1,4,5,6,0,0]])
a

array([[1, 4, 1, 1, 0, 0],
       [4, 5, 6, 3, 0, 0],
       [1, 4, 5, 6, 0, 0]])

然后:

a[:,np.any(a, axis=0)]

array([[1, 4, 1, 1],
       [4, 5, 6, 3],
       [1, 4, 5, 6]])

答案 1 :(得分:2)

这可以用numpy解决:

In[0]: array = np.array([[1,4,1,1,0,0],[4,5,6,3,0,0],[1,4,5,6,0,0]])
In[1]: array[:,~(array==0).all(0)]
Out[1]: 
array([[1, 4, 1, 1],
       [4, 5, 6, 3],
       [1, 4, 5, 6]])

本质上,您会发现总计为0的列,然后将其切出。