gpt4 book ai didi

python - 删除numpy数组(矩阵)中的行: Delete previous k rows if value in column j equals k

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:38 25 4
gpt4 key购买 nike

我正在使用一个 numpy 矩阵,我将其称为 A,它由 n 行和 5 列组成。

假设第 2 列中的所有值均由正整数或零组成。如果 A[j,2] 等于 k,其中 k 是大于或等于 2 的整数,我想从矩阵 A 中删除前 k 行;即矩阵 A 中的 j、j-1、... 和 j-(k-1) 行。

请注意,如果 [j,2]=k,则前 k 行肯定等于 0,因此不存在“重叠”。但这些并不是该列中唯一等于 0 的元素。

有人有什么想法吗?我已经使用过 numpy.delete 和类似的函数很多次了,但就是无法生成这个问题的解决方案。

示例:

A = matrix([[9,9,0,9,9],
[1,2,1,9,9],
[8,8,0,2,3],
[7,7,0,7,8],
[1,2,0,3,4],
[6,6,3,6,6],
[1,2,0,1,2]])

运行后应该变成:

Anew = matrix([[9,9,0,9,9],
[1,2,1,9,9],
[8,8,0,2,3],
[1,2,0,1,2]])

因为“3”(A 的倒数第二行)意味着这 3 行(即倒数第二行 + 前两行必须从矩阵中删除。)

最佳答案

import numpy as np

a= np.matrix([[9,9,0,9,9],
[1,2,1,9,9],
[8,8,0,2,3],
[7,7,0,7,8],
[1,2,0,3,4],
[6,6,3,6,6],
[1,2,0,1,2]])

for i in range(0,7):
if a[i,2]>=2:
idx=i
k=a[i,2]

idxL=[]

for j in range(0,k):
idxL.insert(j,idx)
idx=idx-1
a = np.delete(a, (idxL), axis=0)
print a

输出:

[[9 9 0 9 9]

[1 2 1 9 9]

[8 8 0 2 3]

[1 2 0 1 2]]

关于python - 删除numpy数组(矩阵)中的行: Delete previous k rows if value in column j equals k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com