I have the following code:
print(img.size)
print(10 * img.size)
This will print:
(70, 70)
(70, 70, 70, 70, 70, 70, 70, 70,
Simplish thing if you're writing a bunch of code, but don't want a more complicated vector library...
class V(tuple):
'''A simple vector supporting scalar multiply and vector add'''
def __new__ (cls, *args):
return super(V, cls).__new__(cls, args)
def __mul__(self,s):
return V( *( c*s for c in self) )
def __add__(self,s):
return V( *( c[0]+c[1] for c in zip(self,s)) )
def __repr__(self):
return "V" + super(V, self).__repr__()
# As long as the "vector" is on the left it just works
xaxis = V(1.0, 0.0)
yaxis = V(0.0, 1.0)
print xaxis + yaxis # => V(1.0, 1.0)
print xaxis*3 + yaxis*5 # => V(3.0, 5.0)
print 3*xaxis # Broke, => (1.0, 0.0, 1.0, 0.0, 1.0, 0.0)
The "V" instances otherwise behave just like tuples. This requires that the "V" instances are all created with the same number of elements. You could add, for example, to __new__
if len(args)!=2: raise TypeError('Must be 2 elements')
to enforce that all the instances are 2d vectors....
Might be a nicer way, but this should work
tuple([10*x for x in img.size])
You are trying to apply the function on Tuple as a whole. You need to apply it on individual elements and return a new tuple.
newTuple = tuple([10*x for x in oldTuple])
Remember you cannot change a Tuple.
Solution:
set1=(70, 70)
tuple(2*array(set1))
Explanation: arrays
make direct scalar multiplication possible. Hence the tuple
called set1
here is converted to an array
. I assume you wish to keep using the tuple
, hence we convert the array
back to a tuple
.
This solution is to avoid the explicit and verbose for
loop. I do not know whether it is faster or whether the exact same thing happens in both cases.
img.size = tuple(i * 10 for i in img.size)
There is probably a simpler way than this, but
print map(lambda x: 10*x, img.size)
Will do nearly what you want, although it prints as a list rather than a tuple. Wrap the map
call inside tuple(map...)
if you want it to print as a tuple (parentheses rather than square brackets).