Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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,我拥有给定的数据集: data = np.array([ [1, 2, 1, 3, 1, 2, 1], [3, 4, 1, 5, 2, 7, 2], [2, 1, 2, 1, 1, 4, 5], [6, 1, 2 ,3, 1, 3, 1]]) cols_idx = np.array([0, 0, 1, 0, 1, 0, 0]) 我想从data返回列,其中cols\u idx==1。为此,我使用了: data[:, np.nonzero(cols_idx)]

我拥有给定的数据集:

data = np.array([
    [1, 2, 1, 3, 1, 2, 1],
    [3, 4, 1, 5, 2, 7, 2],
    [2, 1, 2, 1, 1, 4, 5],
    [6, 1, 2 ,3, 1, 3, 1]])

cols_idx = np.array([0, 0, 1, 0, 1, 0, 0])
我想从
data
返回列,其中
cols\u idx==1
。为此,我使用了:

data[:, np.nonzero(cols_idx)]
但它返回一个3D数组,而不是2D数组:

data[:, np.nonzero(cols_idx)]
array([[[1, 1]],    
       [[1, 2]],
       [[2, 1]],    
       [[2, 1]]])

data[:, np.nonzero(cols_idx)].shape
(4, 1, 2)
我希望输出为:

data[:, np.nonzero(cols_idx)]
array([[1, 1],    
       [1, 2],
       [2, 1],    
       [2, 1]])

data[:, np.nonzero(cols_idx)].shape
(4, 2)
如何实现这一点?

print(np.nonzero(cols_idx))
给出
(数组([2,4]),
(一个元组,而不仅仅是一个数组)

因此,您应该使用
np.nonzero(cols_idx)[0]#gives[2 4]
来获得您想要的:

完整代码:

import numpy as np 
data = np.array([
    [1, 2, 1, 3, 1, 2, 1],
    [3, 4, 1, 5, 2, 7, 2],
    [2, 1, 2, 1, 1, 4, 5],
    [6, 1, 2 ,3, 1, 3, 1]])

cols_idx = np.array([0, 0, 1, 0, 1, 0, 0])
new_data = data[:, np.nonzero(cols_idx)[0]]
print(new_data)
'''[[1 1]                                                                                                                        
 [1 2]                                                                                                                        
 [2 1]                                                                                                                        
 [2 1]]'''
print(new_data.shape) # (4,2)
print(np.nonzero(cols_idx))
给出
(数组([2,4]),
(一个元组,而不仅仅是一个数组)

因此,您应该使用
np.nonzero(cols_idx)[0]#gives[2 4]
来获得您想要的:

完整代码:

import numpy as np 
data = np.array([
    [1, 2, 1, 3, 1, 2, 1],
    [3, 4, 1, 5, 2, 7, 2],
    [2, 1, 2, 1, 1, 4, 5],
    [6, 1, 2 ,3, 1, 3, 1]])

cols_idx = np.array([0, 0, 1, 0, 1, 0, 0])
new_data = data[:, np.nonzero(cols_idx)[0]]
print(new_data)
'''[[1 1]                                                                                                                        
 [1 2]                                                                                                                        
 [2 1]                                                                                                                        
 [2 1]]'''
print(new_data.shape) # (4,2)

numpy
文档:

虽然可以使用[nonzero(a)]获得非零值,但建议使用x[x.astype(bool)]或x[x!=0],这将正确处理0-d数组

因此,最好使用:

data[:, cols_idx.astype(bool)]


numpy
文档:

虽然可以使用[nonzero(a)]获得非零值,但建议使用x[x.astype(bool)]或x[x!=0],这将正确处理0-d数组

因此,最好使用:

data[:, cols_idx.astype(bool)]


查看
np.nonzero(cols_idx)
本身。找到
np.flatnonzero()
修复“问题”
flatnonzero
nonzero
元组中提取数组,并使用
[0]
索引。看看它的代码!您希望使用非零的数组生成索引,而不是使用它所包装的元组。该元组本身非常适合于索引。查看
np.nonzero(cols_idx)
本身。找到
np.flatnorzero()
修复“问题”
flatnorzero
nonzero
元组提取数组,并使用
[0]
索引。看看它的代码!您希望使用非零的数组生成索引,而不是使用它所包装的元组。这个元组本身非常适合索引。