我有一个具有以下数组的数据库:
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]
谢谢您的帮助
答案 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的列,然后将其切出。