On Sat, Jan 21, 2017 at 9:23 AM Julian Taylor <jtaylor.deb...@googlemail.com> wrote:
> On 21.01.2017 16:10, josef.p...@gmail.com wrote: > > Is there a simple way to fill in diagonal elements in an array for other > > than main diagonal? > > > > As far as I can see, the diagxxx functions that have offset can only > > read and not inplace modify, and the functions for modifying don't have > > offset and only allow changing the main diagonal. > > > > Usecase: creating banded matrices (2-D arrays) similar to toeplitz. > > > > you can construct index arrays or boolean masks to index using the > np.tri* functions. > e.g. > > a = np.arange(5*5).reshape(5,5) > band = np.tri(5, 5, 1, dtype=np.bool) & ~np.tri(5, 5, -2, dtype=np.bool) > a[band] = -1 > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > https://mail.scipy.org/mailman/listinfo/numpy-discussion You can slice the array you're filling before passing it to fill_diagonal. For example: import numpy as np a = np.zeros((4, 4)) b = np.ones(3) np.fill_diagonal(a[1:], b) np.fill_diagonal(a[:,1:], -b) yields array([[ 0., -1., 0., 0.], [ 1., 0., -1., 0.], [ 0., 1., 0., -1.], [ 0., 0., 1., 0.]]) Hope this helps, Ian Henriksen
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion