我正在处理 4D 数据集,其中有一个嵌套的 for 循环(4 个循环)。该for环路的作品,但它需要一段时间来运行:〜5分钟。我试图用列表理解来正确地写这个,但我对如何做到这一点感到困惑,因为我的嵌套循环:
data = np.random.rand(12, 27, 282, 375)
stdev_data = np.std(data, axis=1)
## nested for loop
count = []
for i in range(data.shape[0]):
for j in range(data.shape[1]):
for lat in range(data.shape[2]):
for lon in range(data.shape[3]):
count.append((data[i, j, lat, lon] < -1.282 * stdev_data[i, lat, lon]).sum(axis=0))
reshape_counts = np.reshape(count, data.shape)
Run Code Online (Sandbox Code Playgroud)
这是我对列表理解的尝试:
i, j, lat, lon = data.shape[0], data.shape[1], data.shape[2], data.shape[3]
print(i, j, lat, lon)
test_list = [[(data < -1.282 * stdev_data).sum(axis=0) for lon in lat] …Run Code Online (Sandbox Code Playgroud) 我有一个以 1 为增量从 0 到 360 的经度值数组。
举个例子:
longitude = np.arange(1,361,1)
print(longitude)
[ 1 2 3 4 5 6 7 8 9 ... 360]
Run Code Online (Sandbox Code Playgroud)
有没有办法对经度数组进行切片,以便我只以 1 为增量包含 1:20 和 275:360?
所以值 1 到 20 (1, 2, 3 ...) 和值 275 到 360 (275, 276, 277 ...)
我试过类似的东西:
test = longitude[1:10:275:360]
Run Code Online (Sandbox Code Playgroud)
但是从 python 的切片方法中,它认为它是 [start:stop:step size]...并且我收到一个错误:
File "<ipython-input-73-39c4381fa9dd>", line 1
test = longitude[1:10:275:360]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我有一个分布图,但我想用某种颜色填充蓝色垂直虚线和分布图开头之间的区域。所以基本上,只需填写颜色,箭头所在的区域:
我尝试做 plt.fill_between... 但它覆盖了整个情节而不是一个特定区域。我如何只填写一个区域?
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
x = np.arange(-5, 5, 0.1) # x from -6 to 6 in steps of 0.1
y = 1 / np.sqrt(2 * np.pi) * np.exp(-x ** 2 / 4.)
std = np.std(y)
plt.plot(x,y, 'k')
plt.axvline(x=-20*std,color='blue', linestyle='--')
plt.fill_between(x,-4,10)
plt.ylim(0,.42)
plt.show()
Run Code Online (Sandbox Code Playgroud)