私は次のコードを持っています:
print(img.size)
print(10 * img.size)
これは印刷されます:
(70, 70)
(70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70)
印刷したい:
(700, 700)
書くことなくこれを行う方法はありますか?
print(10 * img.size[0], 10 * img.size[1])
PS:img.size
はPILイメージです。この場合、それが重要であればダンノ。
より良い方法かもしれませんが、これは動作するはずです
Tuple([10*x for x in img.size])
img.size = Tuple(i * 10 for i in img.size)
Pythonicの方法では、リストの内包表記を使用します。
y = Tuple([z * 10 for z in img.size])
別の方法は次のとおりです。
y = Tuple(map((10).__mul__, img.size))
解決:
set1=(70, 70)
Tuple(2*array(set1))
説明:arrays
は、直接スカラー乗算を可能にします。したがって、Tuple
はset1
ここではarray
に変換されます。 Tuple
を使い続けたいと思うので、array
をTuple
に戻します。
この解決策は、明示的で冗長なfor
ループを回避することです。どちらの場合でも、それが速いのか、まったく同じことが起こるのかはわかりません。
大量のコードを記述しているが、より複雑なベクトルライブラリが必要ない場合は、単純なことです...
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)
それ以外の場合、「V」インスタンスはタプルのように動作します。これには、「V」インスタンスがすべて同じ数の要素で作成される必要があります。たとえば、__ new__に追加できます
if len(args)!=2: raise TypeError('Must be 2 elements')
すべてのインスタンスが2Dベクトルであることを強制する...
この問題がより頻繁に発生し、より大きなタプルまたはリストがある場合、 numpy ライブラリを使用すると、配列に対してあらゆる種類の数学演算を実行できます。ただし、この単純な状況では、これは完全に過剰になります。
おそらくこれよりも簡単な方法がありますが、
_print map(lambda x: 10*x, img.size)
_
タプルではなくリストとして出力されますが、ほぼ望みどおりに動作します。 map
呼び出しをTuple(map...)
内にラップして、タプル(角括弧ではなく括弧)として印刷する場合。
前の回答と同じですが、numpyを使用します。
import numpy as np
result = Tuple(10*np.array(img.size))
次のようなものを試すことができます:
print [10 * s for s in img.size]
Tupleにあるすべての要素に10を掛けた新しいリストが表示されます
Tuple全体に関数を適用しようとしています。個々の要素に適用して、新しいタプルを返す必要があります。
newTuple = Tuple([10*x for x in oldTuple])
タプルは変更できないことに注意してください。
多様性だけを追加します。
import operator
img_size = (70, 70)
map(operator.mul, img_size, len(img_size)*(10,))