首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python如何基于条件创建数组

python如何基于条件创建数组
EN

Stack Overflow用户
提问于 2017-08-16 22:39:43
回答 3查看 4K关注 0票数 0

我想创建一个具有格式的数组,值来自另一个数组。我的输入数组由三列组成。我想创建一个数组,如果第二列相等,则在第一行中包含来自第三列的所有值。因此在本例中,第二列中的前三个值是相等的,所以在新数组中,我想要新数组中每行的第三个值。

代码语言:javascript
复制
a = 
[[1,  1,  4],
[2,  1,  6],
[3,  1,  7],
[4,  2,  0],
[5,  2,  7],
[6,  3,  1]]

结果:

代码语言:javascript
复制
b = 
[[4, 6 , 7],
[0, 7],
[1]]

我试过了:

代码语言:javascript
复制
c = []    
x = 1
for row in a:
    if row[0] == x
        c.extend[row[2]]
    else:
        x = x + 1
        c.append(row[2])

但是结果是所有第三个值的列表

EN

回答 3

Stack Overflow用户

发布于 2017-08-16 22:44:45

代码语言:javascript
复制
a = np.asarray(a)
c = []
for i in range(a[-1,1]): #a[-1,1] is the maximum that will occur
    save = a[a[:,1]==i] # take all the ones that have i in the second entry
    c.append(save[:,2]) # of those add the last entry

重要的是,为此将a转换为np.array

票数 1
EN

Stack Overflow用户

发布于 2017-08-16 22:48:47

下面的方法对我来说很有效:

代码语言:javascript
复制
import numpy as np

c = [[]]    
x = 1
for row in a:
    if row[1] == x:
        c[-1].append(row[2])
    else:
        x = x + 1
        c.append([row[2]])

c = np.asarray(c)
票数 1
EN

Stack Overflow用户

发布于 2017-08-16 22:49:15

如果对第二列进行了排序,则可以使用np.diff找出值发生变化的索引,然后对其进行拆分:

代码语言:javascript
复制
np.split(a[:,2], np.flatnonzero(np.diff(a[:,1]) != 0)+1)
# [array([4, 6, 7]), array([0, 7]), array([1])]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45716569

复制
相关文章

相似问题

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