|
[Date Index]
[Thread Index]
[Author Index]
Re: Please post: Mathematica -another For loop problem
- To: mathgroup at smc.vnet.net
- Subject: [mg65768] Re: Please post: Mathematica -another For loop problem
- From: "Ray Koopman" <koopman at sfu.ca>
- Date: Mon, 17 Apr 2006 02:28:05 -0400 (EDT)
- References: <e1suc9$c7k$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
1.156 wrote:
> [This post has been delayed due to email problems - moderator]
>
> I've got to manipulate some signed 12bit integer numbers from a file and
> apparently Mathematica only handles 8 and 16 bit signed numbers
> (probably for a very good reason). So I bring them in as 16 bits (and
> they're stored that way with a leading zero nibble) and then I have to
> do the following to make sense of them. I really don't know why this
> code works but it does.
>
> For[i = 1, i < Length[y], i++, If[y[[i]] > 2048, y[[i]] =
> y[[i]] - 2048, y[[i]] = y[[i]] + 2048]];
>
> So to my question: once again I had to resort to a For loop to pull this
> off and I know this is a no-no. But I'm so clueless about Mathematica
> that I've never come up with a more sophisticated method after a year or
> so of thinking about it. Can someone help (as they usually can)?
>
> Thanks, Rob
hex from to
000 0 0
001 0 1
: : :
7ff 2047 2047
800 2048 -2048
801 2049 -2047
: : :
ffe 4094 -2
fff 4095 -1
z = Map[If[# < 2048, #, #-4096]&, y]
will do what you want. Note that Map returns a whole new vector that
can be called whatever you want. y is not automatically overwritten.
The equivalent short form is
z = If[# < 2048, #, #-4096]& /@ y
Prev by Date:
Re: Please post: Mathematica -another For loop problem
Next by Date:
Re: Accessing Mathematica on a remote server from java
Previous by thread:
Re: Please post: Mathematica -another For loop problem
Next by thread:
Mathlink and C/C++
|