【问题标题】:Trying to delete 0 columns numpy试图删除 0 列 numpy
【发布时间】:2020-12-16 05:33:38
【问题描述】:

我正在尝试从集合 J_U 的矩阵中删除所有 0 列。但是我收到了这个错误:“索引 4 超出了轴 1 的范围,大小为 4”我认为问题是每次删除 0 列时每个矩阵的维度都会减小,并且不允许它转到2*p 列。我认为这是问题所在,但我不确定如何在没有 0 向量的情况下迭代 J_U 中的每个矩阵。我的实际代码稍大,我的 J_U 的列不是 0。这只是一个玩具代码,这就是为什么它只是一个 0 的矩阵。为了简单起见,我只是展示了最少的代码:)!我希望这已经足够了!任何意见表示赞赏。

n = 5
p = 4
T = 5
J_U = {}
for i in range(n):
    J_U["J_U" + str(i)] = np.zeros((T,2*p))

for j in range(n):
  for i in range(2*p):
    if np.all((J_U['J_U' + str(j)][:,i])==0):
      J_U['J_U' + str(j)] = np.delete(J_U['J_U' + str(j)],i,1)

【问题讨论】:

    标签: python arrays numpy for-loop matrix


    【解决方案1】:

    问题和你描述的完全一样。要解决它,您可以保存要删除的列的索引,然后将其删除:

    idx=[]
    for j in range(n):
      idx.append([])
      for i in range(2*p):
        if np.all((J_U['J_U' + str(j)][:,i])==0):
          idx[j].append(i)
      J_U['J_U' + str(j)] = np.delete(J_U['J_U' + str(j)],idx[j],1)
    

    但比删除更好的解决方案是选择具有任何非零值的列:

    for j in range(n):
      J_U['J_U' + str(j)] = J_U['J_U' + str(j)][:,np.any(J_U['J_U' + str(j)],0)]
    

    注意np.all((J_U['J_U' + str(j)][:,i])==0)np.all(J_U['J_U' + str(j)]==0,axis=1)~np.any((J_U['J_U' + str(j)],axis=1) 相同。

    您的示例的输出:

    {'J_U0': array([], shape=(5, 0), dtype=float64), 'J_U1': array([], shape=(5, 0), dtype=float64), 'J_U2': array([], shape=(5, 0), dtype=float64), 'J_U3': array([], shape=(5, 0), dtype=float64), 'J_U4': array([], shape=(5, 0), dtype=float64)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多