我正在努力可视化一些气候模型的输出。计算是在投影的纬度/经度网格上完成的。由于该模型模拟海冰,因此所有陆地网格单元都被屏蔽。在 Python 中绘制地理信息的标准工具是 Basemap 和 Cartopy,它们都使用 matplotlib 例程。特别是,pcolormesh这是绘图的明显选择。如果没有陆地遮罩,那就很简单了:
X = longitude
Y = latitude
C = variable
fig, ax = plt.subplots()
plt.pcolormesh(X,Y,C)
Run Code Online (Sandbox Code Playgroud)
虽然C允许为掩码数组,但pcolormesh无法处理X和上的掩码数组Y。那么我该如何解决这个问题呢?
举一个简单的例子:
n = 100
X,Y = np.meshgrid(np.linspace(1,5,n),np.linspace(1,5,n))
C = np.sin(X*Y)
fig, ax = plt.subplots()
plt.pcolormesh(X,Y,C)
Run Code Online (Sandbox Code Playgroud)
现在想象我们有一个面具:
X[50:60,:] = np.nan
X[:,50:60] = np.nan
Y[50:60,:] = np.nan
Y[:,50:60] = np.nan
C[50:60,:] = np.nan
C[:,50:60] = np.nan
Run Code Online (Sandbox Code Playgroud)
我必须解决这个问题的第一个想法是只选择有效的条目并重塑X, Y, 和C:
M = np.isnan(X)
X_valid = …Run Code Online (Sandbox Code Playgroud) center 是 numpy 数组的列表 [ ]。Shortest_dist[1] 是一个 numpy 数组。但是,当我这样做时:
centers.index(shortest_dist[1])
Run Code Online (Sandbox Code Playgroud)
它告诉我
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
这很奇怪,所以我尝试了以下方法:
请参阅以下演示。我无法理解正在发生的事情。
>>>
>>>
>>>
>>> a = np.asarray([1,2,3,4,5])
>>> b = np.asarray([2,3,4,5,6])
>>> c = []
>>> c.append(a)
>>> c.append(b)
>>> c.index(a)
0
>>> c.index(c[0])
0
>>> c.index(c[1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more …Run Code Online (Sandbox Code Playgroud) import numpy
print "asdf"
Run Code Online (Sandbox Code Playgroud)
当我尝试在 Visual Studio Code 中调试/运行上述 Python 代码时,出现以下错误(使用 OSX)
导入错误,无法导入名称 float96
决议是什么?
我已经从 python 网站安装了 python。也尝试从brew安装后运行,但没有效果。
编辑
问题出在 Visual Studio 的所有导入上
有没有一种简单的方法可以通过在Numpy或Scipy中平均特定大小的块,甚至使用 NetC D F 工具或类似工具来减小 3D 矩阵的大小?我不久前使用 strides 编写了一个 2D 函数,但是一个随时可用的函数会有很大帮助。
编辑:
我希望输入和输出的示例如下:
Input's shape: (500, 500, 100)
Calling the function: downsize(input, 10, 10, 10, func)
Output's shape: (50, 50, 10)func其中每个单元格的值都是连续 10x10x10 子矩阵的结果。
或者,代码可以获取所需的矩阵大小作为输入,而不是子矩阵的大小并计算出来。
谢谢
我有一个值,比如 2016 和一个排序的 numpy 数组:[2005, 2010, 2015, 2020, 2025, 2030]。在数组中查找绑定 2016 的 2 个值的 Pythonic 方法是什么?在本例中,答案将是一个数组 [2015, 2020]。
不知道除了循环之外如何做到这一点,但希望有一个更基于 numpy 的解决方案
- 编辑:
你可以假设你永远不会得到数组中的值,我对此进行了预过滤
假设我有一些 DataFrame(在我的例子中大约有 10000 行,这只是一个最小的例子)
>>> import pandas as pd
>>> sample_df = pd.DataFrame(
{'col1': list(range(1, 10)), 'col2': list(range(10, 19))})
>>> sample_df
col1 col2
0 1 10
1 2 11
2 3 12
3 4 13
4 5 14
5 6 15
6 7 16
7 8 17
8 9 18
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我需要计算DataFrame 中ln(col_i(n+1) / col_i(n))每个代表的系列,其中代表行号。
我该如何计算这个?col_in
我知道我可以使用非常简单的方式获得每列之间的差异
>>> sample_df.diff()
col1 col2
0 NaN NaN
1 1 1
2 1 1
3 1 …Run Code Online (Sandbox Code Playgroud) 下面的代码将如何工作?
k = np.array([[ 0., 0.07142857, 0.14285714],
[ 0.21428571, 0.28571429, 0.35714286],
[ 0.42857143, 0.5, 0.57142857],
[ 0.64285714, 0.71428571, 0.78571429],
[ 0.85714286, 0.92857143, 1. ]])
y = np.array([[0, 3, 1, 2],
[2, 1, 0, 3]])
b = k[y]
Run Code Online (Sandbox Code Playgroud)
形状是:
k 形状: (5, 3)
Y 形状:(2, 4)
b 形状:(2,4,3)
为什么 numpy 矩阵接受另一个矩阵作为其索引以及 k 如何找到正确的输出?为什么会产生一个张量呢?
b 的输出为
[[[ 0. 0.07142857 0.14285714]
[ 0.64285714 0.71428571 0.78571429]
[ 0.21428571 0.28571429 0.35714286]
[ 0.42857143 0.5 0.57142857]]
[[ 0.42857143 0.5 0.57142857]
[ 0.21428571 0.28571429 0.35714286]
[ 0. …Run Code Online (Sandbox Code Playgroud) 只是想知道下一种情况怎么可能:
def fit(self, train, target):
xgtrain = xgb.DMatrix(train, label=target, missing=np.nan)
self.model = xgb.train(self.params, xgtrain, self.num_rounds)
Run Code Online (Sandbox Code Playgroud)
我将训练数据集作为具有 5233 列的csr_matrix传递,在转换为 DMatrix 后,我得到了 5322 个特征。
后来在预测步骤中,由于上述错误,我收到了错误:(
def predict(self, test):
if not self.model:
return -1
xgtest = xgb.DMatrix(test)
return self.model.predict(xgtest)
Run Code Online (Sandbox Code Playgroud)
错误:...训练数据没有以下字段:f5232
如何保证将训练/测试数据集正确转换为 DMatrix?
有没有机会在Python中使用类似于R的东西?
# get same columns for test/train sparse matrixes
col_order <- intersect(colnames(X_train_sparse), colnames(X_test_sparse))
X_train_sparse <- X_train_sparse[,col_order]
X_test_sparse <- X_test_sparse[,col_order]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的方法不起作用:
def _normalize_columns(self):
columns = (set(self.xgtest.feature_names) - set(self.xgtrain.feature_names)) | \
(set(self.xgtrain.feature_names) - set(self.xgtest.feature_names))
for item in columns:
if …Run Code Online (Sandbox Code Playgroud) 假设有 600 个带注释的语义分割掩模图像,其中包含 10 种不同的颜色,每种颜色代表一个实体。这些图像位于形状 (600, 3, 72, 96) 的 numpy 数组中,其中 n = 600、3 = RGB 通道、72 = 高度、96 = 宽度。
如何将 numpy 数组中的每个 RGB 像素映射到颜色索引值?例如,颜色列表将为 [(128, 128, 0), (240, 128, 0), ...n],并且 numpy 数组中的所有 (240, 128, 0) 像素将转换为索引唯一映射中的值 (= 1)。
如何用更少的代码高效地做到这一点?这是我想出的一种解决方案,但速度相当慢。
# Input imgs.shape = (N, 3, H, W), where (N = count, W = width, H = height)
def unique_map_pixels(imgs):
original_shape = imgs.shape
# imgs.shape = (N, H, W, 3)
imgs = imgs.transpose(0, 2, 3, 1)
# …Run Code Online (Sandbox Code Playgroud) 我是Python数据分析的新手,并试图弄清楚如何将多维数组操作为不同的维度。在线教程或论坛没有解释如何指定“newshape”的参数numpy.reshape(a, newshape, order='C')
这是我试图理解的一个例子。如果有人能解释第 4 行,那将会非常有帮助。
import numpy as np
a1 = np.arrange(8).reshape( (8,1) )
b = np.repeat(a1,8,axis=1)
c = b.reshape(2,4,2,4) # line 4
Run Code Online (Sandbox Code Playgroud) numpy ×10
python ×9
matrix ×2
arrays ×1
dataframe ×1
image ×1
list ×1
matplotlib ×1
pandas ×1
performance ×1
plot ×1
python-2.7 ×1
scipy ×1
series ×1
xgboost ×1