# Could you explain the code conataining shape to me?

task is: " Create a 1-dimensional array named `cols_with_zeros` that contains all columns of `x` that contain at least one zero."

Solution is:

``````import numpy as np
x = np.array([
[6, 8, 90, 0, 4],
[8, 0, 5, 3, 10],
[2, 6, 10, 6, 6],
[10, 8, 3, 6, 7],
[10, 7, 7, 0, 2]
])
mask = np.count_nonzero(x, axis=0) < x.shape[0]
cols_with_zeros = x[:, mask]

print(cols_with_zeros)
``````

Problem is: I don’t understand what `<x.shape[0]`does.

Have you tried playing around with `x.shape` to see what it produces? You can check out the documentation here.

Please note that because `x` is a square array (i.e. it has the same number of columns as it has rows) the expressions `x.shape[0]` and `x.shape[1]` will return the same value (specifically → 5).

Essentially the logic of constructing `mask` goes like this: “for each column, count how many nonzero values there are in each row and if it’s less than the total number of rows in `x`, return `True`, otherwise return `False`.” Ultimately this will produce a boolean array that indicates which columns contain 1 or more `0` values. For example, if `mask` returns `[False, True, False, True, False]` it means that the first, third, and fifth columns do not contain any `0` values but the second and fourth columns do contain `0` values.

Hope this helps and if it doesn’t, please let me know and we can try something else together.

1 Like