# Hang during conversion

**URL:** https://discourse.julialang.org/t/hang-during-conversion/18697
**Category:** New to Julia
**Created:** [December 15, 2018, 7:58pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697 "2018-12-15T19:58:19Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Reza\_Mortazavi](https://avatars.discourse-cdn.com/v4/letter/r/ecd19e/32.png) [@Reza\_Mortazavi](https://discourse.julialang.org/u/Reza_Mortazavi)
#### Post date: [December 15, 2018, 7:58pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/1 "2018-12-15T19:58:19Z")

</div>

I have a 2D array of 0s and 1s stored as Int64. I want to convert them to booleans and tried the following statement but my computer hangs. Would you please describe why?

a = [1 0 1; 0 1 1];  
b=[Bool(x) for x in a…]

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 15, 2018, 8:02pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/2 "2018-12-15T20:02:47Z")

</div>

Try `Bool.(a)`. The reason it hangs is likely the splatting `...`. It is not a good idea to splat a large number of arguments.

---

<div class="post-metadata">

### Author: ![chakravala](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chakravala/32/6832_2.png) [@chakravala](https://discourse.julialang.org/u/chakravala)
#### Post date: [December 15, 2018, 8:44pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/3 "2018-12-15T20:44:12Z")

</div>

You could also try `BitArray(a)`. Is a `BitArray` better than an `Array{Bool,N}` ?

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 15, 2018, 11:31pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/4 "2018-12-15T23:31:06Z")

</div>

It depends a bit of what you will use the array for later. It will take less space but is slower in some usecases.

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [December 15, 2018, 11:47pm UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/5 "2018-12-15T23:47:56Z")

</div>

> [@Reza\_Mortazavi](#):
>
> a = [1 0 1; 0 1 1];  
> b=[Bool(x) for x in a…]

You can use a comprehension, but don’t use splatting here: Use `[Bool(x) for x in a]`. It’s not just inefficient to splat, it makes no sense. I’m surprised it works at all.

But it’s clearly even better to use `Bool.(a)` or `BitArray`.

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 16, 2018, 12:13am UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/6 "2018-12-16T00:13:45Z")

</div>

> [@DNF](#):
>
> I’m surprised it works at all.

I don’t think it works at all, it just takes a long time to error.

---

<div class="post-metadata">

### Author: ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)
#### Post date: [December 16, 2018, 1:51am UTC](https://discourse.julialang.org/t/hang-during-conversion/18697/7 "2018-12-16T01:51:06Z")

</div>

Actually `Bool.(a)` returns a `BitArray`, so the result is the same, but `BitArray(a)` is a bit more efficient (mainly in terms of memory). A much faster way however is `a .== 1`.

Comparison:

```julia
julia> A = rand(0:1, 100, 100);

julia> @btime Bool.($A);
  43.683 μs (3 allocations: 5.56 KiB)

julia> @btime BitArray($A);
  40.027 μs (2 allocations: 1.38 KiB)

julia> @btime $A .== 1;
  9.132 μs (3 allocations: 5.56 KiB)

```
