我尝试使用numpy从3D数组中删除全零列,同时保持维数。我也不想使用trim,因为列可能不在数组的边缘。
Intended functionality
我尝试使用~np.all
,但这似乎去掉了一个维度:
import numpy as np
vals = [1,0,3,4,0,6,7,8,9,10,11,12]
array = np.reshape(vals, (2,2,3))
数组:
[[[ 1 0 3]
[ 4 0 6]]
[[ 7 8 9]
[10 11 12]]]
这就是我想看到的:
[[[ 1 3]
[ 4 6]]
[[ 7 9]
[10 12]]]
1条答案
按热度按时间vaj7vani1#
让我们把它分成多个步骤。
1.使用
astype
方法将数组转换为布尔值。所有False
的列都是0。1.对数组使用NOT将0列从
False
转换为True
。1.在轴1上使用
all
执行逻辑AND,检查列是否全为0。1.在轴0上使用
any
执行逻辑OR,该操作将结果折叠以获得数组中每列的True
或False
值。1.使用NOT版本的结果来索引数组的最后一个轴,以仅获取不包含0的列。
带标签的步骤:
一起来:
输出: