为了账号安全,请及时绑定邮箱和手机立即绑定

是否有一些优雅的方式来操纵我的ndarray

是否有一些优雅的方式来操纵我的ndarray

哈士奇WWW 2021-03-28 10:50:23
我有一个名为的矩阵xs:array([[1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 1],       [2, 1, 0, 0, 0, 1, 2, 1, 1, 2, 2]])现在,我想用同一行中最近的前一个元素替换零(假定第一列必须为非零。)。粗略的解决方案如下:In [55]: row, col = xs.shapeIn [56]: for r in xrange(row):   ....:     for c in xrange(col):   ....:         if xs[r, c] == 0:   ....:             xs[r, c] = xs[r, c-1]   ....: In [57]: xsOut[57]: array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],       [2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2]])任何帮助将不胜感激。
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

如果可以使用pandas,replace则将在一条指令中显式显示替换项:


import pandas as pd


import numpy as np


a = np.array([[1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 1],

              [2, 1, 0, 0, 0, 1, 2, 1, 1, 2, 2]])



df = pd.DataFrame(a, dtype=np.float64)


df.replace(0, method='pad', axis=1)


查看完整回答
反对 回复 2021-04-02
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我的版本基于逐步滚动和初始数组的屏蔽,不需要其他库(numpy除外):


import numpy as np


a = np.array([[1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 1],

              [2, 1, 0, 0, 0, 1, 2, 1, 1, 2, 2]])


for i in xrange(a.shape[1]):

    a[a == 0] = np.roll(a,i)[a == 0]

    if not (a == 0).any():             # when all of zeros

        break                          #        are filled


print a

## [[1 1 1 1 1 1 1 1 1 2 1]

##  [2 1 1 1 1 1 2 1 1 2 2]]


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信