Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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:检查列表中的每个元素是否都存在特定的时间_Python_Arrays_Numpy_Scipy - Fatal编程技术网

Python:检查列表中的每个元素是否都存在特定的时间

Python:检查列表中的每个元素是否都存在特定的时间,python,arrays,numpy,scipy,Python,Arrays,Numpy,Scipy,我有以下问题。我有一个这样的范围列表: parameterRanges2 = [(1,5),(1,5),(1,7),(1,7),(0,10),(1,20),(1,3),(0,1)] 我有一个numpy数组,如下所示: arr = np.array([[2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0], [4.0,2.0,3.0,4.0,2.0,4.0,5.0,1.0,2.0,4.0,

我有以下问题。我有一个这样的范围列表:

parameterRanges2 = [(1,5),(1,5),(1,7),(1,7),(0,10),(1,20),(1,3),(0,1)]
我有一个numpy数组,如下所示:

arr = np.array([[2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0],
[4.0,2.0,3.0,4.0,2.0,4.0,5.0,1.0,2.0,4.0,1.0,3.0,4.0,2.0,3.0,5.0,1.0,3.0,4.0,2.0],
[2.0,3.0,4.0,6.0,7.0,1.0,2.0,3.0,5.0,6.0,1.0,2.0,4.0,5.0,6.0,2.0,3.0,4.0,5.0,6.0],
[6.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,2.0,2.0,3.0,4.0,5.0],
[8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,7.0,8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0],
[11.0,13.0,14.0,16.0,17.0,19.0,1.0,3.0,4.0,6.0,7.0,9.0,10.0,11.0,13.0,14.0,16.0,17.0,19.0,1.0],
[1.0,1.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0,1.0,1.0,1.0,1.0,1.0,2.0],
[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0]])

列表中的每个parameterRange元组都对应于numpy数组中的子数组。是否有办法检查相应范围内的所有元素是否至少存在一次?例如,在numpy数组的第一个子列表中,所有数字1、2、3、4、5至少存在一次,在第二个子列表中存在一次,在第三个列表中,例如数字1、2、3、4、5、6、7存在一次,依此类推。

仅使用numpy函数可能有更有效的方法,但下面的代码可以工作。我想不出一个简单的Numpy方法来实现这一点,因为我们无法制作一个标准的Numpy数组,因为所有行的长度都不相同

import numpy as np

arr = np.array([
    [2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0],
    [4.0,2.0,3.0,4.0,2.0,4.0,5.0,1.0,2.0,4.0,1.0,3.0,4.0,2.0,3.0,5.0,1.0,3.0,4.0,2.0],
    [2.0,3.0,4.0,6.0,7.0,1.0,2.0,3.0,5.0,6.0,1.0,2.0,4.0,5.0,6.0,2.0,3.0,4.0,5.0,6.0],
    [6.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,2.0,2.0,3.0,4.0,5.0],
    [8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,7.0,8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0],
    [11.0,13.0,14.0,16.0,17.0,19.0,1.0,3.0,4.0,6.0,7.0,9.0,10.0,11.0,13.0,14.0,16.0,17.0,19.0,1.0],
    [1.0,1.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0,1.0,1.0,1.0,1.0,1.0,2.0],
    [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0]
])

parameterRanges2 = [(1,5),(1,5),(1,7),(1,7),(0,10),(1,20),(1,3),(0,1)]
ranges = [np.arange(u, v+1, dtype='float64') for u, v in parameterRanges2]

print([np.all(np.isin(u,v)) for u, v in zip(ranges, arr)])
输出

[True, True, True, True, False, False, True, True]

可能有一种更有效的方法,只使用Numpy函数,但下面的代码可以工作。我想不出一个简单的Numpy方法来实现这一点,因为我们无法制作一个标准的Numpy数组,因为所有行的长度都不相同

import numpy as np

arr = np.array([
    [2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0,1.0,3.0,2.0,4.0,2.0,4.0,3.0,5.0],
    [4.0,2.0,3.0,4.0,2.0,4.0,5.0,1.0,2.0,4.0,1.0,3.0,4.0,2.0,3.0,5.0,1.0,3.0,4.0,2.0],
    [2.0,3.0,4.0,6.0,7.0,1.0,2.0,3.0,5.0,6.0,1.0,2.0,4.0,5.0,6.0,2.0,3.0,4.0,5.0,6.0],
    [6.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,2.0,2.0,3.0,4.0,5.0],
    [8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,7.0,8.0,9.0,0.0,1.0,2.0,3.0,4.0,5.0,6.0],
    [11.0,13.0,14.0,16.0,17.0,19.0,1.0,3.0,4.0,6.0,7.0,9.0,10.0,11.0,13.0,14.0,16.0,17.0,19.0,1.0],
    [1.0,1.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0,1.0,1.0,1.0,1.0,1.0,2.0],
    [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0]
])

parameterRanges2 = [(1,5),(1,5),(1,7),(1,7),(0,10),(1,20),(1,3),(0,1)]
ranges = [np.arange(u, v+1, dtype='float64') for u, v in parameterRanges2]

print([np.all(np.isin(u,v)) for u, v in zip(ranges, arr)])
输出

[True, True, True, True, False, False, True, True]

利用范围是整数,我们可以给出一个O(nm)解,nxm是
arr
的形状。algo的工作原理如下:

  • 丢弃所有非整型元素及其范围之外的所有元素
  • 使用
    np.add.at
    有效地(O(mn))为范围内的数字生成二进制计数
  • 计算每行中高于阈值的存储箱数,并与范围进行比较


利用范围是整数,我们可以给出一个O(nm)解,nxm是
arr
的形状。algo的工作原理如下:

  • 丢弃所有非整型元素及其范围之外的所有元素
  • 使用
    np.add.at
    有效地(O(mn))为范围内的数字生成二进制计数
  • 计算每行中高于阈值的存储箱数,并与范围进行比较


may help may help OK nice,是否也有可能说范围内的数字应该至少符合2倍或3倍?@Varlor应该可以使用
np.add.at
我将尝试.TIL
np.add.at
@PaulPanzer也可以对浮动范围这样做吗?致以最良好的祝愿@Varlor取决于细节,成本可能会更高(O(nm-log-nm))。用完整的例子提出一个新问题。好的,很好,是否也有可能说范围内的数字应该至少符合2倍或3倍?@Varlor应该可以使用
np.add.at
我将尝试.TIL
np.add.at
@PaulPanzer也可以对浮动范围这样做吗?致以最良好的祝愿@Varlor取决于细节,成本可能会更高(O(nm-log-nm))。用完整的例子提出一个新问题。好的,尼斯,是否也有可能说范围内的数字应该至少符合2倍或3倍?好的,尼斯,是否也有可能说范围内的数字应该至少符合2倍或3倍?