Hi, I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works. ###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result) ### TEST In [8]: x=np.arange(float(0),10) In [9]: max max max_n In [9]: max_n(x,2) Out[9]: array([9, 8]) In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan]) *************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
On 2013/08/17 9:49 PM, Sudheer Joseph wrote:
Hi, I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works.
###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a
This is not making "b" a copy of "a", it is simply making it an alias for it. To make it a copy you could use "b = a[:]", or "b = a.copy()" It sounds like you don't really need a function, however. Try this: # test data: a = np.random.randn(10) n = 2 # One-line solution: biggest_n = np.sort(a)[-n:] print a print biggest_n If you want them ordered from largest to smallest, just reverse the list: biggest_n = biggest_n[::-1] Eric
result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result)
### TEST In [8]: x=np.arange(float(0),10)
In [9]: max max max_n
In [9]: max_n(x,2) Out[9]: array([9, 8])
In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan]) *************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
Thanks a lot Eric, Here comes the smartness of python!!, I am just climbing the bottom steps... with best regards, Sudheer *************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
________________________________ From: Eric Firing
To: numpy-discussion@scipy.org Sent: Sunday, 18 August 2013 1:57 PM Subject: Re: [Numpy-discussion] strange behavior of variable On 2013/08/17 9:49 PM, Sudheer Joseph wrote:
Hi, I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works.
###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a
This is not making "b" a copy of "a", it is simply making it an alias for it. To make it a copy you could use "b = a[:]", or "b = a.copy()"
It sounds like you don't really need a function, however. Try this:
# test data: a = np.random.randn(10) n = 2
# One-line solution: biggest_n = np.sort(a)[-n:]
print a print biggest_n
If you want them ordered from largest to smallest, just reverse the list:
biggest_n = biggest_n[::-1]
Eric
result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result)
### TEST In [8]: x=np.arange(float(0),10)
In [9]: max max max_n
In [9]: max_n(x,2) Out[9]: array([9, 8])
In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan]) *************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
However, I was looking for the indices of the biggest 3 numbers which can be used to find corresponding values in another vector, which made me to write the function. Is there a smarter way for getting indices? with best regards, Sudheer Thanks a lot Eric, Here comes the smartness of python!!, I am just climbing the bottom steps...
with best regards, Sudheer
*************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
________________________________ From: Eric Firing
To: numpy-discussion@scipy.org Sent: Sunday, 18 August 2013 1:57 PM Subject: Re: [Numpy-discussion] strange behavior of variable On 2013/08/17 9:49 PM, Sudheer Joseph wrote:
Hi,
I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works.
###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a
This is not making "b" a copy of "a", it is simply making it an alias for it. To make it a copy you could use "b = a[:]", or "b = a.copy()"
It sounds like you don't really need a function, however. Try this:
# test data: a = np.random.randn(10) n = 2
# One-line solution: biggest_n = np.sort(a)[-n:]
print a print biggest_n
If you want them ordered from largest to smallest, just reverse the list:
biggest_n = biggest_n[::-1]
Eric
result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result)
### TEST In [8]: x=np.arange(float(0),10)
In [9]: max max max_n
In [9]: max_n(x,2) Out[9]: array([9, 8])
In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan])
Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
Try:
np.argsort(a)[-n:]
-n
On 18 Aug 2013 10:10, "Sudheer Joseph"
However, I was looking for the indices of the biggest 3 numbers which can be used to find corresponding values in another vector, which made me to write the function. Is there a smarter way for getting indices? with best regards, Sudheer Thanks a lot Eric,
Here comes the smartness of python!!, I am just climbing the bottom steps... with best regards, Sudheer
*************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
------------------------------ *From:* Eric Firing
*To:* numpy-discussion@scipy.org *Sent:* Sunday, 18 August 2013 1:57 PM *Subject:* Re: [Numpy-discussion] strange behavior of variable On 2013/08/17 9:49 PM, Sudheer Joseph wrote:
Hi, I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works.
###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a
This is not making "b" a copy of "a", it is simply making it an alias for it. To make it a copy you could use "b = a[:]", or "b = a.copy()"
It sounds like you don't really need a function, however. Try this:
# test data: a = np.random.randn(10) n = 2
# One-line solution: biggest_n = np.sort(a)[-n:]
print a print biggest_n
If you want them ordered from largest to smallest, just reverse the list:
biggest_n = biggest_n[::-1]
Eric
result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result)
### TEST In [8]: x=np.arange(float(0),10)
In [9]: max max max_n
In [9]: max_n(x,2) Out[9]: array([9, 8])
In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan]) *************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
Tank you,
It worked fine,
with best regards,
Sudheer
From: Nathaniel Smith
Sent: Sunday, 18 August 2013 3:01 PM Subject: Re: [Numpy-discussion] strange behavior of variable
Try: np.argsort(a)[-n:] -n On 18 Aug 2013 10:10, "Sudheer Joseph"
wrote: However, I was looking for the indices of the biggest 3 numbers which can be used to find corresponding values in another vector, which made me to write the function. Is there a smarter way for getting indices? with best regards, Sudheer Thanks a lot Eric,
Here comes the smartness of python!!, I am just climbing the bottom steps...
with best regards, Sudheer
*************************************************************** Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
________________________________ From: Eric Firing
To: numpy-discussion@scipy.org Sent: Sunday, 18 August 2013 1:57 PM Subject: Re: [Numpy-discussion] strange behavior of variable On 2013/08/17 9:49 PM, Sudheer Joseph wrote:
Hi,
I have defined a small function to find the n maximum values of an array as below. With in it I assign the input array to a second array and temporarily make the array location after first iteration as nan. I expected this temporary change to be limited to the second variable. However my initial variable gets modified. Can any one through some light to what is happening here?. In case of matlab this logic works.
###### #FUNCTION maxn ###### import numpy as np def max_n(a,n): b=a
This is not making "b" a copy of "a", it is simply making it an alias for it. To make it a copy you could use "b = a[:]", or "b = a.copy()"
It sounds like you don't really need a function, however. Try this:
# test data: a = np.random.randn(10) n = 2
# One-line solution: biggest_n = np.sort(a)[-n:]
print a print biggest_n
If you want them ordered from largest to smallest, just reverse the list:
biggest_n = biggest_n[::-1]
Eric
result=[] for i in np.arange(1,n+1): mxidx=np.where(b==max(b)) result.append(mxidx) b[mxidx]=np.nan result=np.ravel(result) return(result)
### TEST In [8]: x=np.arange(float(0),10)
In [9]: max max max_n
In [9]: max_n(x,2) Out[9]: array([9, 8])
In [10]: x Out[10]: array([ 0., 1., 2., 3., 4., 5., 6., 7., nan, nan])
Sudheer Joseph Indian National Centre for Ocean Information Services Ministry of Earth Sciences, Govt. of India POST BOX NO: 21, IDA Jeedeemetla P.O. Via Pragathi Nagar,Kukatpally, Hyderabad; Pin:5000 55 Tel:+91-40-23886047(O),Fax:+91-40-23895011(O), Tel:+91-40-23044600(R),Tel:+91-40-9440832534(Mobile) E-mail:sjo.India@gmail.com;sudheer.joseph@yahoo.com Web- http://oppamthadathil.tripod.com ***************************************************************
NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (3)
-
Eric Firing
-
Nathaniel Smith
-
Sudheer Joseph