Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
268 views
in Technique[技术] by (71.8m points)

python - The truth value of an array with more than one element is ambigous when trying to index an array

I am trying to put all elements of rbs into a new array if the elements in var(another numpy array) is >=0 and <=.1 . However when I try the following code I get this error:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

rbs = [ish[4] for ish in realbooks]
for book in realbooks:
    var -= float(str(book[0]).replace(":", ""))
    bidsred = rbs[(var <= .1) and (var >=0)]

any ideas on what I'm doing wrong?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As I told you in a comment to a previous answer, you need to use either:

c[a & b]

or

c[np.logical_and(a, b)] 

The reason is that the and keyword is used by Python to test between two booleans. How can an array be a boolean? If 75% of its items are True, is it True or False? Therefore, numpy refuses to compare the two.

So, you either have to use the logical function to compare two boolean arrays on an element-by-element basis (np.logical_and) or the binary operator &.

Moreover, for indexing purposes, you really need a boolean array with the same size as the array you're indexing. And it has to be an array, you cannot use a list of True/False instead: The reason is that using a boolean array tells NumPy which element to return. If you use a list of True/False, NumPy will interpret that as a list of 1/0 as integers, that is, indices, meaning that you' either get the second or first element of your array. Not what you want.

Now, as you can guess, if you want to use two boolean arrays a or b for indexing, choosing the items for which either a or b is True, you'd use

c[np.logical_or(a,b)]

or

c[a | b]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...