是否有任何pythonic方法删除for循环和if/else在下面的代码中.
此代码迭代NumPy数组并检查条件并根据条件更改值.
>>> import numpy as np
>>> x=np.random.randint(100, size=(10,5))
>>> x
array([[79, 50, 18, 55, 35],
[46, 71, 46, 95, 52],
[97, 37, 71, 2, 79],
[80, 96, 60, 85, 72],
[ 6, 52, 63, 86, 38],
[35, 50, 13, 93, 54],
[69, 21, 4, 40, 53],
[83, 7, 30, 16, 78],
[18, 34, 91, 67, 89],
[82, 16, 16, 24, 80]])
>>> for i in range(x.shape[0]):
for j in range(x.shape[1]):
if x[i,j]>50:
x[i,j]=0
elif x[i,j]<50:
x[i,j]=1
>>> x …Run Code Online (Sandbox Code Playgroud) 如何在这里使用np.random.choice?
可以p通过一些操作来计算,例如:
p=[ 1.42836755e-01, 1.42836735e-01 , 1.42836735e-01, 1.42836735e-01
, 4.76122449e-05, 1.42836735e-01 , 4.76122449e-05 , 1.42836735e-01,
1.42836735e-01, 4.76122449e-05]
Run Code Online (Sandbox Code Playgroud)
通常,和p不精确等于1:
>>> sum(p)
1.0000000017347
Run Code Online (Sandbox Code Playgroud)
我想通过概率= p来随机选择:
>>> np.random.choice([1,2,3,4,5,6,7,8,9, 10], 4, p=p, replace=False)
array([4, 3, 2, 9])
Run Code Online (Sandbox Code Playgroud)
这项工作在这里!但是在程序中有一个错误:
Traceback (most recent call last):
indexs=np.random.choice(range(len(population)), population_number, p=p, replace=False)
File "mtrand.pyx", line 1141, in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:17808)
ValueError: probabilities do not sum to 1
Run Code Online (Sandbox Code Playgroud)
如果我打印p:
[ 4.17187500e-05 2.49937500e-01 4.16562500e-05 4.16562500e-05
2.49937500e-01 4.16562500e-05 4.16562500e-05 4.16562500e-05
2.49937500e-01 2.49937500e-01]
Run Code Online (Sandbox Code Playgroud)
但是它可以通过以下方式在python shell中工作p:
>>> p=[ 4.17187500e-05 …Run Code Online (Sandbox Code Playgroud) 我想比较两个数组(4个浮点数)并打印不匹配的项目。我使用以下代码:
>>> from numpy.testing import assert_allclose as np_assert_allclose
>>> x=np.array([1,2,3])
>>> y=np.array([1,0,3])
>>> np_assert_allclose(x,y, rtol=1e-4)
AssertionError:
Not equal to tolerance rtol=0.0001, atol=0
(mismatch 33.33333333333333%)
x: array([1, 2, 3])
y: array([1, 0, 3])
Run Code Online (Sandbox Code Playgroud)
此代码的问题是大数组:
(mismatch 0.0015104228617559556%)
x: array([ 0.440088, 0.35994 , 0.308225, ..., 0.199546, 0.226758, 0.2312 ])
y: array([ 0.44009, 0.35994, 0.30822, ..., 0.19955, 0.22676, 0.2312 ])
Run Code Online (Sandbox Code Playgroud)
我找不到什么值不匹配。怎么能看到他们?
gradientm是一个 matlab 函数,用于计算数据网格的梯度slope、 和aspect
句法
[ASPECT, SLOPE, gradN, gradE] = gradientm(Z, R)
描述
[ASPECT, SLOPE, gradN, gradE] = gradientm(Z, R) 计算常规数据网格 Z 相对于参考 R 的坡度、坡向以及坡度的北和东分量。如果网格包含以米为单位的高程,由此产生的坡度和坡度以从北和从水平向上顺时针的度数为单位。北向和东向梯度分量是地图变量在北向和东向每米距离的变化。该计算对默认地球椭球体上的地图变量使用有限差分。
问题
我想要一些东西equivalent in python。我已经创建了这个 python 库PyDEM但它是用于 python 2.x 但我正在使用python 3.x
这是使用的方式DEMProcessor来计算slope,并aspect为DEM文件的PyDEM:
# needs to match above command
filename = 'Shasta-30m-DEM.tif'
# instantiate a processor object
processor = DEMProcessor(filename)
# get magnitude of slope and aspect
mag, …Run Code Online (Sandbox Code Playgroud) 例如,我将在浮点数组上应用平均过滤器window_size=3。我找到了这个库:
from skimage.filters.rank import mean
import numpy as np
x=np.array([[1,8,10],
[5,2,9],
[7,2,9],
[4,7,10],
[6,14,10]])
print(x)
print(mean(x, square(3)))
[[ 1 8 10]
[ 5 2 9]
[ 7 2 9]
[ 4 7 10]
[ 6 14 10]]
[[ 4 5 7]
[ 4 5 6]
[ 4 6 6]
[ 6 7 8]
[ 7 8 10]]
Run Code Online (Sandbox Code Playgroud)
但是这个函数不能在浮点数组上运行:
from skimage.filters.rank import mean
import numpy as np
x=np.array([[1,8,10],
[5,2,9],
[7,2,9],
[4,7,10],
[6,14,10]])
print(x)
print(mean(x.astype(float), square(3)))
File "/home/pd/RSEnv/lib/python3.5/site-packages/skimage/util/dtype.py", line 236, …Run Code Online (Sandbox Code Playgroud)