我是Python的新手,也是Numpy的新手.
到目前为止,我有一个数据的ndarray,其中是列表列表,我有一个索引数组.如何删除索引数组中的每一行索引并将该行放入新的ndarray?
例如,我的数据看起来像
[[1 1 1 1]
[2 3 4 5]
[6 7 8 9]
[2 2 2 2]]
Run Code Online (Sandbox Code Playgroud)
我的索引数组是
[0 2]
Run Code Online (Sandbox Code Playgroud)
我想要两个得到两个数组,其中一个
[[1 1 1 1]
[6 7 8 9]]
Run Code Online (Sandbox Code Playgroud)
和
[[2 3 4 5]
[2 2 2 2]]
Run Code Online (Sandbox Code Playgroud)
为清晰起见,扩展示例:例如,我的数据看起来像
[[1 1 1 1]
[2 3 4 5]
[6 7 8 9]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]]
Run Code Online (Sandbox Code Playgroud)
我的索引数组是
[0 2 3 5]
Run Code Online (Sandbox Code Playgroud)
我想要两个得到两个数组,其中一个
[[1 1 1 1]
[6 7 8 9]
[2 2 2 2]
[4 4 4 4]]
Run Code Online (Sandbox Code Playgroud)
和
[[2 3 4 5]
[3 3 3 3]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]]
Run Code Online (Sandbox Code Playgroud)
我已经研究过numpy.take()和numpy.choose(),但我无法弄明白.谢谢!
编辑:我还应该补充一点,我的输入数据和索引数组的长度可变,具体取决于数据集.我想要一个适用于可变尺寸的解决方案.
seb*_*erg 12
对不起,所以你已经拥有take
并且基本上需要相反的take
,你可以很好地得到一些索引:
a = np.arange(16).reshape((8,2))
b = [2, 6, 7]
mask = np.ones(len(a), dtype=bool)
mask[b,] = False
x, y = a[b], a[mask] # instead of a[b] you could also do a[~mask]
print x
array([[ 4, 5],
[12, 13],
[14, 15]])
print y
array([[ 0, 1],
[ 2, 3],
[ 6, 7],
[ 8, 9],
[10, 11]])
Run Code Online (Sandbox Code Playgroud)
因此,您只需创建一个布尔掩码,即b
无法从中进行选择a
.
实际上已经np.split
有处理这个(它的纯python代码,但这不应该真的打扰你):
>>> a = np.arange(16).reshape((8,2))
>>> b = [2, 6]
>>> print np.split(a, b, axis=0) # plus some extra formatting
[array([[0, 1],
[2, 3]]),
array([[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]]),
array([[12, 13],
[14, 15]])]
Run Code Online (Sandbox Code Playgroud)
split总是包含来自0:b[0]
和的切片b[0]:
,我想你可以将它们从结果中切出来以简化.如果你当然有规律的分割(所有相同的大小),你可能会更好地使用reshape
.
另请注意,这会返回视图.因此,如果您更改这些阵列,则除非.copy
先调用,否则请更改原始阵列.
归档时间: |
|
查看次数: |
4174 次 |
最近记录: |