我想知道做以下事情最简单的方法是什么:
假设我们有以下2d数组:
>>> a = np.array([['z', 'z', 'z', 'f', 'z','f', 'f'], ['z', 'z', 'z', 'f', 'z','f', 'f']])
array([['z', 'z', 'z', 'f', 'z', 'f', 'f'],
['z', 'z', 'z', 'f', 'z', 'f', 'f']],
dtype='<U1')
>>> b = np.array(range(0,14)).reshape(2, -1)
array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13]])
>>> idxs = list(zip(*np.where(a == 'f')))
[(0, 3), (0, 5), (0, 6), (1, 3), (1, 5), (1, 6)]
>>> [b[x] for x in idxs]
[3, 5, 6, 10, 12, 13]
但是,我想保留之前关于第一个索引或行的结构,即:
[[3, 5, 6], [7, 11]]
有没有办法保持这种结构?你知道吗
使用
for
循环:a = np.array([['z', 'z', 'z', 'f', 'z','f', 'f'], ['z', 'z', 'z', 'f', 'z','f', 'f']]) b = np.array(range(0,14)).reshape(2, -1) idxs = list(zip(*np.where(a == 'f'))) c=[[],[]] for x in idxs: c[x[0]].append(b[x]) print c
;这是一个更复杂但纯粹的解决方案:
a
的扁平版本中),其中它是一个'f'
。你知道吗代码如下所示:
比其他解决方案长一点,我不确定它是否会更快1。你知道吗
不过,就我个人而言,我会用一个列表和一个
zip
:它短得多,而且根据我的时间安排,相当出色。你知道吗
时间安排:
但与my suggestion at Psidoms answer相比要慢得多:
相关问题 更多 >
编程相关推荐