首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得np 2d数组的所有行直到某个向量

如何获得np 2d数组的所有行直到某个向量
EN

Stack Overflow用户
提问于 2017-05-05 22:53:47
回答 1查看 60关注 0票数 1

假设我有这样一个2d数组:

代码语言:javascript
复制
>>> s
array([[1, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1],
       [0, 0, 0, 1],
       [0, 1, 0, 0]])

(每一行都是某个特性的一个热编码)。我想取s的所有行,直到看到一个特定的向量为止。例如,如果我想获得([0, 0, 0, 1])之前的所有行,我希望得到:

代码语言:javascript
复制
>>> desired
array([[1, 0, 0, 0],
       [0, 0, 1, 0]])

有什么好的方法可以在朗皮或西亚诺这样做吗?我在网上的文档上找不到解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 22:55:06

方法#1

获取与您要寻找的数组相等的值,为我们提供一个2D数组。然后,查找所有与.all(axis=1)匹配的行,这将是一个1D布尔数组。最后,要获得匹配中的第一个实例,请使用.argmax(),并从开始到索引沿行对数组进行切片。

因此,完整的实施将是-

代码语言:javascript
复制
s[:(s == [0,0,0,1]).all(1).argmax()]

一步一步的跑-

代码语言:javascript
复制
In [39]: s  # Input array
Out[39]: 
array([[1, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1],
       [0, 0, 0, 1],
       [0, 1, 0, 0]])

In [33]: s == [0,0,0,1] # compare against search array
Out[33]: 
array([[False,  True,  True, False],
       [ True,  True, False, False],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True, False,  True, False]], dtype=bool)

In [34]: (s == [0,0,0,1]).all(1)
Out[34]: array([False, False,  True,  True, False], dtype=bool)

In [37]: (s == [0,0,0,1]).all(1).argmax()
Out[37]: 2

In [38]: s[:(s == [0,0,0,1]).all(1).argmax()]
Out[38]: 
array([[1, 0, 0, 0],
       [0, 0, 1, 0]])

方法#2

因为我们处理的是一个热编码数组,所以我们可以沿着2D输入数组的每一行使用2D,从而将其简化为1D数组。类似地,将搜索数组缩减为标量,其余步骤保持不变。这将提高内存效率,因为我们将避免创建2D布尔数组。让我们直接进入一个样本-

代码语言:javascript
复制
In [89]: s.argmax(1)
Out[89]: array([0, 2, 3, 3, 1])

In [90]: np.argmax([0,0,0,1])
Out[90]: 3

In [91]: s.argmax(1) == np.argmax([0,0,0,1])
Out[91]: array([False, False,  True,  True, False], dtype=bool)

In [92]: (s.argmax(1) == np.argmax([0,0,0,1])).argmax()
Out[92]: 2

# Final code
In [93]: s[:(s.argmax(1) == np.argmax([0,0,0,1])).argmax()]
Out[93]: 
array([[1, 0, 0, 0],
       [0, 0, 1, 0]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43814821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档