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

我有一个名为的矩阵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.shape


In [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]: xs

Out[57]: 

array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1],

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

任何帮助将不胜感激。


哈士奇WWW
浏览 145回答 3
3回答

天涯尽头无女友

如果可以使用pandas,replace则将在一条指令中显式显示替换项:import pandas as pdimport numpy as npa = 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)

幕布斯7119047

我的版本基于逐步滚动和初始数组的屏蔽,不需要其他库(numpy除外):import numpy as npa = 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 filledprint a## [[1 1 1 1 1 1 1 1 1 2 1]##  [2 1 1 1 1 1 2 1 1 2 2]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python