Python 在一定条件下从数组列表中获取元素
我试图只打印包含元素的行,其中列(j)和列(j+1)之间的差值等于[0,1])。这意味着,在给定的示例中,我只保留第一列(此数据集只是较大数据集的一个小样本):Python 在一定条件下从数组列表中获取元素,python,sorting,arraylist,Python,Sorting,Arraylist,我试图只打印包含元素的行,其中列(j)和列(j+1)之间的差值等于[0,1])。这意味着,在给定的示例中,我只保留第一列(此数据集只是较大数据集的一个小样本): 提前谢谢 您会得到一个ValueError,因为这里使用=返回一个bools数组,表示每个元素的相等性,而不是bool本身。例如: np.array([1, 2]) == [1, 2] 返回np.array([True,True]),而不是True。要将结果作为单个布尔值获取,请使用all(),如果调用它的bool数组中的所有元素都
提前谢谢 您会得到一个
ValueError
,因为这里使用=
返回一个bool
s数组,表示每个元素的相等性,而不是bool
本身。例如:
np.array([1, 2]) == [1, 2]
返回np.array([True,True])
,而不是True
。要将结果作为单个布尔值获取,请使用all()
,如果调用它的bool
数组中的所有元素都是True
,则该函数将返回True
。如果条件变为:
((np.array(e[i][j+1]) - np.array(e[i][j])) == [0,1]).all()
在固定条件下,代码最终输出:
([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 3])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])
这似乎是对的。那么让我从这个问题开始 当您将
numpy.array
与多个元素进行比较时,可以得到以下结果:[True,False]
如果
-语句不知道如何理解它,因此您需要完全按照异常告诉您的操作,您需要在条件的末尾添加.all()
,如下所示:((np.array(e[i][j+1])-np.array(e[i][j])==[0,1]).all()
在下面的代码中,我假设您要查找的行仅包含差异[0,1]
的列,而不是列。(如果我错了,我很抱歉,我刚醒。)
让我们继续
但仍有一个问题。使用您的解决方案,您将获得以下结果:
([0,0],[0,1],[0,2])
([0,0],[0,1],[0,2])
([0,0],[0,1],[0,3])
([0,0],[1,0],[1,1])
([0,0],[1,0],[1,1])
([0,0],[1,0],[1,1])
但你想要的结果是:
([0,0],[0,1],[0,2])
因此,这里是我基于此的解决方案
我希望这会有帮助。既然e[0][3]不存在,你会从中减去[0,2](e[0][2]什么?你想把它打印出来吗?另外,我认为您在创建numpy数组的方式上犯了一个小错误,“我试图只打印列(j)和列(j+1)之间的差值等于[0,1])的元素行。”因此,在减法的结果中,所有值都需要与参考值匹配?错误消息建议您在比较结果上使用
.any
或.all
——我想知道,如果您希望所有值都匹配,那么哪一个是合适的?
([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 2])
([0, 0], [0, 1], [0, 3])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])
([0, 0], [1, 0], [1, 1])
import numpy as np
class ContinueEx(Exception):
pass
continue_ex = ContinueEx()
_list = e= [([0, 0], [0, 1], [0, 2]),
([0, 0], [0, 1], [0, 3]),
([0, 0], [0, 2], [1, 0]),
([0, 0], [0, 2], [1, 1]),
([0, 0], [0, 2], [1, 1]),
([0, 0], [0, 2], [1, 1]),
([0, 0], [0, 2], [1, 2]),
([0, 0], [0, 2], [1, 2]),
([0, 0], [0, 2], [2, 0]),
([0, 0], [1, 0], [1, 1]),
([0, 0], [1, 0], [1, 1]),
([0, 0], [1, 0], [1, 1]),
([0, 0], [1, 2], [2, 0])]
for _inner_list in range(0,len(_list)):
try:
for _list_element in range(1, len(_list[_inner_list])):
if not ((np.array(_list[_inner_list][_list_element]) - np.array(_list[_inner_list][_list_element-1]) == np.array([0,1]))).all():
raise continue_ex
print(_list[_inner_list])
except ContinueEx:
continue