如果我有两个列表,其中都包含多维Numpy数组,我怎么能看到一个列表中的数组是否在另一个列表中?数组列表:如何查看一个列表中的数组是否在另一个列表中?
如果我有两个列表,两者均含有的元素,我可以通过一个列表(元件逐元素)搜索,以确定它是否是在第二列表中,像这样:
all_numbers = [1,2,3,4,5,6,7,8,9,10]
even_numbers = [2,4,6,8,10]
for i in all_numbers:
if i in even_numbers:
print(i,'is an even number.')
else:
print(i,'is an odd number.')
输出:
1 is an odd number.
2 is an even number.
3 is an odd number.
4 is an even number.
5 is an odd number.
6 is an even number.
7 is an odd number.
8 is an even number.
9 is an odd number.
10 is an even number.
现在,如果我有两个列表,两者仅包含多维数组,为什么我不能搜索,如果在一个列表中的阵列中的其他使用相同的方法?这些阵列都是多维的,并且由数据文件生成(使用urllib
和numpy
模块)。据我所知,列表中的数组只是元素,所以使用相同的方法应该会得到相同的结果;然而,当我尝试执行我的程序时,我收到以下消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
为什么会发生这种情况?显然,使用多维数组并不等同于列表中的简单元素。有没有办法实现我想要的(即查看一个列表中的数组是否在另一个列表中)?
[以下是我的程序示例。我正在使用几个数据文件,所有这些文件都是多维数组。为了保持程序一般,我已经删除了实际的URL。数据文件按年份(从1981-1990)组织,所以文件具有相同数量的信息,闰年除外,这些数据有额外一天的数据。我的两个列表是拥有所有文件的列表,还有一个列有闰年文件的列表。请让我知道,如果有是所需要的任何其他信息]
import numpy as np
import urllib.request
data1981url = '1981url'
data1981 = np.genfromtxt(data1981url)
data1982url = '1982url'
data1982 = np.genfromtxt(data1982url)
data1983url = '1983url'
data1983 = np.genfromtxt(data1983url)
data1984url = '1984url'
data1984 = np.genfromtxt(data1984url)
data1985url = '1985url'
data1985 = np.genfromtxt(data1985url)
data1986url = '1986url'
data1986 = np.genfromtxt(data1986url)
data1987url = '1987url'
data1987 = np.genfromtxt(data1987url)
data1988url = '1988url'
data1988 = np.genfromtxt(data1988url)
data1989url = '1989url'
data1989 = np.genfromtxt(data1989url)
data1990url = '1990url'
data1990 = np.genfromtxt(data1990url)
years = [data1981, data1982, data1983, data1984, data1985, data1986, data1987, data1988,
data1989, data1990]
leapyears = [data1984, data1988]
years_by_day = []
flux_data = []
for i in years:
y = i[:,46]
for k in y:
flux_data.append(k)
if i in leapyears: # Where the problem arises.
x = i[0,0] + np.arange(len(y))/105480
for j in x:
years_by_day.append(j)
else:
x = i[0,0] + np.arange(len(y))/105120
for j in x:
years_by_day.append(j)
输出:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
打印'K;我敢打赌这是一个布尔数组。这不能与'if'一起使用。在测试数组时,通常'in'不起作用。 – hpaulj
看看这是否有帮助 - http://stackoverflow.com/questions/38674027/find-the-row-indexes-of-several-values-in-a-numpy-array – Divakar