Hello all,

I am trying to find all the indicies where certain criteria is met, here is my code

ind1 = Vector{Float64}(undef, 4)

for i in 1:4
ind1[i] = intersect(findall(x->x==l, z), findall(sum(M[i,j]*z[j] for j in items)+sum(N[i,j]*w[j] for j in items)+q[i])>0)
end

It is giving me error

TypeError: non-boolean (Float64) used in boolean context

Any help or guidance will be appreciated

Thank you

You can use 3 backticks `````

to display formatted code. After a bit of formatting, the second condition looks like you misplaced a parenthesis. You wrote of `findall( formula ) > 0`

for the second condition, I think you meant `findall(formula > 0)`

as below:

```
ind1 = Vector{Float64}(undef, 4)
for i in 1:4
ind1[i] = intersect(
findall(x->x==l, z),
findall(sum(M[i,j]*z[j] for j in items)+sum(N[i,j]*w[j] for j in items)+q[i]>0),
)
end
```

1 Like

Oh ok, thanks alot, but now it is giving me this error .

MethodError: Cannot `convert`

an object of type Vector{Int64} to an object of type Int64

P.S I have converted ` ind1 = Vector{Int64}(undef, 4)`

Right, intersect is returning a vector of indices and you are attempting to assign it to a single Int64 in your ind1 vector. Try

```
ind1 = map(1:4) do i
intersect(
findall(x->x==l, z),
findall(sum(M[i,j]*z[j] for j in items)+sum(N[i,j]*w[j] for j in items)+q[i]>0),
)
end
```

That should result in a `Vector{Vector{Int64}}`

.

1 Like

contradict:

```
ind1 = map(1:4) do i
intersect(
findall(x->x==l, z),
findall(sum(M[i,j]*z[j] for j in items)+sum(N[i,j]*w[j] for j in items)+q[i]>0),
)
end
```

Nope this still doesnt work, See the follwoing code:

```
l = [0, 0, 0, 0]
z = [0,1,1,1]
ind1 = map(1:4) do i
findall(x->x==l, z)
end
```

The answer should be: ind1 = [1] as at only index one we have z=l. but it isnt, it gives me [0,0,0,0]