Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Python 3.x_Numpy_Numpy Slicing - Fatal编程技术网

Python numpy数组中的按值选择性删除

Python numpy数组中的按值选择性删除,python,python-3.x,numpy,numpy-slicing,Python,Python 3.x,Numpy,Numpy Slicing,编辑:完善的问题陈述 我仍然在琢磨numpy图书馆提供的各种新奇的选择。我桌上出现了以下话题: 目的: 在多维数组中,我选择一列。这种切片效果很好。但在此之后,存储在另一个列表中的值需要从列值中筛选出来 当前状态: array1 = np.asarray([[0,1,2],[1,0,3],[2,3,0]]) print(array1) array1woZero = np.nonzero(array1) print(array1woZero) toBeRemoved = [] toBeRemove

编辑:完善的问题陈述

我仍然在琢磨numpy图书馆提供的各种新奇的选择。我桌上出现了以下话题:

目的: 在多维数组中,我选择一列。这种切片效果很好。但在此之后,存储在另一个列表中的值需要从列值中筛选出来

当前状态:

array1 = np.asarray([[0,1,2],[1,0,3],[2,3,0]])
print(array1)
array1woZero = np.nonzero(array1)
print(array1woZero)
toBeRemoved = []
toBeRemoved.append(1)
print(toBeRemoved)   
column = array1[:,1]
result = np.delete(column,toBeRemoved)
上述代码没有带来预期的结果。事实上,np.delete()命令只是删除索引1处的值,但我需要过滤掉值1。我也不明白的是,当将非零应用于array1时,形状会发生变化:array1是(3,3),array1woZero会变成一个2个DIM的元组,每个DIM有6个值

0
Array of int64
(6,)
0
0
1
1
2
2

1
Array of int64
(6,)
1
2
0
2
0
1
我的感觉是,我需要一些类似于使用排除操作符进行切片的东西。你有什么提示让我解决这个问题吗?是否需要使用不同的数据结构

In [18]: arr = np.asarray([[0,1,2],[1,0,3],[2,3,0]])                                     
In [19]: arr                                                                             
Out[19]: 
array([[0, 1, 2],
       [1, 0, 3],
       [2, 3, 0]])
nonzero
给出其参数(
arr
)的所有非零元素的索引:

这是数组的元组,每个维度一个。该输出可能令人困惑,但它很容易用于返回所有这些非零元素:

In [22]: arr[idx]                                                                        
Out[22]: array([1, 2, 1, 3, 2, 3])
这样的索引,使用一对数组,生成一个1d数组。在您的示例中,每行只有一个0,但通常情况并非如此

这是相同的索引-具有相同长度的两个列表:

In [24]: arr[[0,0,1,1,2,2], [1,2,0,2,0,1]]                                               
Out[24]: array([1, 2, 1, 3, 2, 3])
idx[0]
只需在该元组的数组上选择行索引。那可能不是你想要的。我怀疑你是否想把
np.delete
应用到这个元组

很难从描述和代码中看出您想要什么。也许这是因为你不明白非零产生了什么

我们还可以选择具有布尔掩蔽的非零元素:

In [25]: arr>0                                                                           
Out[25]: 
array([[False,  True,  True],
       [ True, False,  True],
       [ True,  True, False]])
In [26]: arr[ arr>0 ]                                                                    
Out[26]: array([1, 2, 1, 3, 2, 3])

布尔掩蔽的提示非常好,帮助我开发了自己的解决方案。以下代码段中的符号名称不同,但其思想应该变得清晰

一开始,我有我的整个搜索空间

searchSpace = relativeDistances[currentNode,:]
假设它的形状是(5,)。我的过滤器是在索引上定义的,即范围0..4。然后我定义了另一个形状相同的numpy数组“filter”,所有值都为1,要过滤的值设置为0

filter = np.full(shape=nodeCount,fill_value=1,dtype=np.int32())
filter[0] = 0
filter[3] = 0
searchSpace = searchSpace * filter
minValue = searchSpace[searchSpace > 0].min()
neighborNode = np.where(searchSpace==minValue)

过滤器阵列为我提供了以后作为循环的一部分调整过滤器的灵活性。使用带0的元素相乘和后续的布尔屏蔽,我可以为最小搜索创建缩减的搜索空间。与单独的数组或列表相比,我仍然保留原始形状,这是在where语句中获得正确索引所必需的。

查找布尔或逻辑索引。您可以使用它从相同形状的其他数组中删除值。然后我们不使用标准的非零函数。我想要什么?步骤1:从多维数组中选择一列步骤2:筛选出一组值(例如“1”、“33”和“5”)。这个集合的大小是可变的/不断增长的,因此我在示例代码中使用列表结构。也许最后我也可以在整个列上使用for循环,但我担心由于迭代次数太多而导致运行时增加。宁愿使用numpy的切片功能。
arr[:,i]
arr
数组的
ith
列。布尔掩蔽示例看起来很有希望。。。在您的示例中,多值列表而不是0会是什么样子?
filter = np.full(shape=nodeCount,fill_value=1,dtype=np.int32())
filter[0] = 0
filter[3] = 0
searchSpace = searchSpace * filter
minValue = searchSpace[searchSpace > 0].min()
neighborNode = np.where(searchSpace==minValue)