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]
索引。看看它的代码!您希望使用非零的数组生成索引,而不是使用它所包装的元组。这个元组本身非常适合索引。