удалить пустое измерение массива numpy - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть массив фигур (X, Y, Z).Я хочу проверить каждое измерение Z и действительно быстро удалить ненулевое измерение.

Подробное объяснение:

Я хочу проверить массив [:,:, 0] если любая запись отлична от нуля.

Если да, игнорировать и проверить массив [:,:, 1].

Иначе, если нет, удалить массив измерений [:,:,0]

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Также не на 100% уверен, что вы после, но я думаю, что вы хотите

np.squeeze(array, axis=2)

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.squeeze.html

0 голосов
/ 31 декабря 2018

Я не уверен, что вы хотите, но, надеюсь, это указывает в правильном направлении.

Редактировать 1 января:
Вдохновленный @ J.Warren's использование np.squeezeЯ думаю, что np.compress может быть более подходящим.

Это делает сжатие в одну строку

np.compress((a!=0).sum(axis=(0,1)), a, axis=2) # 

Чтобы объяснить первый параметр в np.compress

(a!=0).sum(axis=(0, 1)) # sum across both the 0th and 1st axes. 
Out[37]: array([1, 1, 0, 0, 2])  # Keep the slices where the array !=0

Мой первый ответ, который может больше не иметь отношения

import numpy as np

a=np.random.randint(2, size=(3,4,5))*np.random.randint(2, size=(3,4,5))*np.random.randint(2, size=(3,4,5))
# Make a an array of mainly zeroes.
a
Out[31]:
array([[[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 1],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 1, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 1],
        [0, 0, 0, 0, 0],
        [1, 0, 0, 0, 0]]])

res=np.zeros(a.shape[2], dtype=np.bool)
for ix in range(a.shape[2]):
    res[ix] = (a[...,ix]!=0).any()

res
Out[34]: array([ True,  True, False, False,  True], dtype=bool)
# res is a boolean array of which slices of 'a' contain nonzero data

a[...,res]
# use this array to index a
# The output contains the nonzero slices
Out[35]:
array([[[0, 0, 0],
        [0, 0, 1],
        [0, 0, 0],
        [0, 0, 0]],

       [[0, 1, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 0, 1],
        [0, 0, 0],
        [1, 0, 0]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...