假设我有一个m
xn
数组。对于每一行,我有要访问的s
(带有s
<;=n
)个条目。每行的条目数s
是相同的,但是它们的索引不同。我想索引到x
并提取这个m
xs
子数组。在
这里有一个具体的例子。假设我有以下数组:
import numpy as np
import scipy.sparse
x = np.arange(4*5).reshape(-1,5)
Out[25]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
下面是我想从每一行输入的内容:
^{pr2}$这个数组表示从第0行开始,我需要输入0、1和2。在第1行中,我需要条目1、2和3。等等。结果应该是:
array([[ 0, 1, 2],
[ 6, 7, 8],
[10, 12, 14],
[18, 19, 17]])
我可以通过写作获得上述结果:
x[[[_] for _ in xrange(len(x))], col_ix]
基本上是:
x[[[0],[1],[2],[3]], col_ix]
但我觉得有更好的方法。我应该注意到,最终目标是为这个子数组的每个条目分配0。在
由于我们需要访问每行上的3列,因此我们需要重复每行的索引3次,我们可以使用^{} 来完成此操作,现在使用重复的行索引和
col_ix
的扁平版本,我们可以对x
执行multi-dimensional indexing:在没有首先扩展矩阵的情况下,很难想出一种顺序选择行的方法,就像Ashwini的答案一样。我想用:
这仍然通过
col_ix.shape[1]
中间产物生成x.shape
。只要你的实际数组不是太大就可以了。在IIUC,你不能利用靶场上的广播吗?也许是像
相关问题 更多 >
编程相关推荐