[Numpy-discussion] How to fix the diagonal values of a matrix

Keith Goodman kwgoodman at gmail.com
Tue Mar 16 13:57:32 EDT 2010


On Tue, Mar 16, 2010 at 7:43 AM, Keith Goodman <kwgoodman at gmail.com> wrote:
> On Tue, Mar 16, 2010 at 5:56 AM,  <josef.pktd at gmail.com> wrote:
>> On Tue, Mar 16, 2010 at 9:43 AM, gerardo.berbeglia <gberbeglia at gmail.com> wrote:
>>>
>>> How can i take out the diagonal values of a matrix and fix them to zero?
>>>
>>> Example:
>>>
>>> input: [[2,3,4],[3,4,5],[4,5,6]]
>>>
>>> output: [[0,3,4],[3,0,5],[4,5,0]]
>>
>> assuming a is square
>>
>> a[range(len(a)),range(len(a))] = 0
>>
>> see also np.diag
>>
>> Josef
>
> Or, if you need speed, here's the fast way:
>
> a.flat[::4] = 0
>
> or more generally
>
> a.flat[::a.shape[0]+1] = 0

Oh, I see that fill_diagonal is in numpy 1.4. So:

>> a = np.array([[2,3,4],[3,4,5],[4,5,6]])
>> np.fill_diagonal(a, 0)
>> a

array([[0, 3, 4],
       [3, 0, 5],
       [4, 5, 0]])



More information about the NumPy-Discussion mailing list