【发布时间】:2018-12-20 17:12:26
【问题描述】:
我有一个 numpy 数组:
arr = array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
还有一个索引数组,ind = array([0, 1, 1])
我想做的是对于arr 中的ith 行,仅使用numpy.delete 删除arr[i] 中的ind[i]th 行。
所以本质上是一种更 Pythonic 的方式来做到这一点:
x, y, z = arr.shape
new_arr = np.empty((x, y - 1, z))
for i, j in enumerate(ind):
new_arr[i] = np.delete(arr[i], j, 0)
arr = new_arr.astype(int)
所以这里的输出是:
array([[[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[15, 16, 17]],
[[18, 19, 20],
[24, 25, 26]]])
【问题讨论】:
-
您可能需要创建一个新的、较小的数组,然后复制您需要的内容。由于数组不是固定大小的,因此无法在循环中删除您需要的内容。
-
那么,我发布的代码是实现这一目标的唯一方法吗?啊,rip,我希望 numpy 有一些更优化的方法来做到这一点。
-
您发布的代码删除了
a[i]的行,而不是列。您究竟要删除哪一行,行还是列? -
@QuangHoang,数组是 3d,所以名称“行”和“列”不明确。在这里,OP 正在考虑 0 和 1 轴,您似乎将它们视为 1 和 2。
-
@MatthieuBrucher,
np.delete也创建了一个新数组。
标签: python arrays python-3.x numpy