リスト内包表記が機能しないのはなぜですか?行列内の乱数をスケーリングしようとしています。これはラムダ関数として機能しますが、リスト内包としては機能しません。私は何が間違っているのですか?
import numpy as np
import pylab as pl
def RandomSource(N,x0,x1,y0,y1,c0,c1):
randSources = np.random.random((N,3))
# print to double-check agruments of the function
print 'This are scaling values %s %s %s %s %s %s %s' % (N,x0,x1,y0,y1,c0,c1)
# below should scale a whole matrix
[x0 + x*(x1-x0) for x in randSources[:,0]]
[y0 + y*(y1-y0) for y in randSources[:,1]]
[c0 + c*(c1-c0) for c in randSources[:,2]]
return randSources
xS = 10
yS = -100
cS = 5
N = 1000
newPoints = RandomSource(N,xS-5,xS+5,yS-3,yS+2,cS-1,cS+2)
print type(newPoints)
print 'newPoints x = %s' % newPoints[0,0]
print '\nnewPoints = %s\nnewX = %s \nnewY = %s' % (newPoints[0:10], newPoints[0:10,0], newPoints[0:10,1])
pl.scatter(newPoints[:,0], newPoints[:,1], s=20, c=newPoints[:,2], marker = 'x' )
pl.show()
出力:
newPoints = [[ 0.34890398 0.65918009 0.8198278 ]
[ 0.47497993 0.98015398 0.23980164]
[ 0.86359112 0.10184741 0.24804018]]
しかし、次のようなものを期待していました:
newPoints = [[ 6.4124458 -99.77854982 5.60905745]
[ 9.04459454 -99.63120435 4.08184828]
[ 14.94181747 -98.50800397 4.95530916]]