plus/minus operator for python ±

Question:

I am looking for a way to do a plus/minus operation in python 2 or 3. I do not know the command or operator, and I cannot find a command or operator to do this.

Am I missing something?

Asked By: Whitequill Riclo

||

Answers:

I think you want that for an equation like this;

enter image description here

Well there is no operator for that unless you don’t use SymPy, only you can do is make an if statement and find each multiplier.

Answered By: user4435153

Another possibility: uncertainties is a module for doing calculations with error tolerances, ie

(2.1 +/- 0.05) + (0.6 +/- 0.05)    # => (2.7 +/- 0.1)

which would be written as

from uncertainties import ufloat

ufloat(2.1, 0.05) + ufloat(0.6, 0.05)

Edit: I was getting some odd results, and after a bit more playing with this I figured out why: the specified error is not a tolerance (hard additive limits as in engineering blueprints) but a standard-deviation value – which is why the above calculation results in

ufloat(2.7, 0.07071)    # not 0.1 as I expected!
Answered By: Hugh Bothwell

There is no such object in SymPy yet (as you saw, there is an issue suggesting one https://github.com/sympy/sympy/issues/5305). It’s not hard to emulate, though. Just create a Symbol, and swap it out with +1 and -1 separately at the end. Like

pm = Symbol(u'±') # The u is not needed in Python 3. I used ± just for pretty printing purposes. It has no special meaning.
expr = 1 + pm*x # Or whatever
# Do some stuff
exprpos = expr.subs(pm, 1)
exprneg = expr.subs(pm, -1)

You could also just keep track of two equations from the start.

Answered By: asmeurer

If you happen to be using matplotlib, you can print mathematical expressions similar as one would with Latex. For the +/- symbol, you would use:

print( r"value $pm$ error" )

Where the r converts the string to a raw format and the $-signs are around the part of the string that is a mathematical equation. Any words that are in this part will be in a different font and will have no whitespace between them unless explicitly noted with the correct code. This can be found on the relavent page of the matplotlib documentation.

Sorry if this is too niche, but I stumbeled across this question trying to find this very answer.

Answered By: Orange Pukeko

Instead of computing expressions like

s1 = sqrt((125 + 10 * sqrt(19)) / 366)
s2 = sqrt((125 - 10 * sqrt(19)) / 366)

you could use

import numpy as np

pm = np.array([+1, -1])
s1, s2 = sqrt((125 + pm * 10 * sqrt(19)) / 366)
Answered By: Nico Schlömer

If you are looking to print the ± symbol, just use:

print(u"u00B1")
Answered By: mimoralea

Instead of computing expressions like

s1 = sqrt((125.0 + 10.0*sqrt(19)) / 366.0)
s2 = sqrt((125.0 - 10.0*sqrt(19)) / 366.0)

you could use

r = 10.0*sqrt(19)
s1, s2 = (sqrt((125.0 + i) / 366.0) for i in (r, -r))

This is based on Nico‘s answer, but using a generator expression instead of NumPy

Answered By: wjandrea

A plus/minus tolerance test can be done using a difference and absolute against the tolerance you wish to test for. Something like:

tst_data = Number you wish to test
norm = Target number
tolerance = Whatever the allowed tolerance is.

if abs(tst_data - norm) <= tolerance:
do stuff

Using the abs function allows the test to return a +/- within tolerance as True

Answered By: atc_ceedee
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.