标签: numpy

处理 pcolormesh 中的屏蔽坐标数组

我正在努力可视化一些气候模型的输出。计算是在投影的纬度/经度网格上完成的。由于该模型模拟海冰,因此所有陆地网格单元都被屏蔽。在 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)

C 的颜色图

现在想象我们有一个面具:

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)

python plot numpy matplotlib

4
推荐指数
1
解决办法
6012
查看次数

Python:numpy数组列表,不能执行index()吗?

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)

python arrays numpy list

4
推荐指数
1
解决办法
2491
查看次数

从 Visual Studio Code 调试 Python - 导入 Numpy

import numpy
print "asdf"
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Visual Studio Code 中调试/运行上述 Python 代码时,出现以下错误(使用 OSX)

导入错误,无法导入名称 float96

决议是什么?

我已经从 python 网站安装了 python。也尝试从brew安装后运行,但没有效果。

编辑

问题出在 Visual Studio 的所有导入上

python numpy visual-studio-code

4
推荐指数
1
解决办法
4447
查看次数

通过在 Numpy 或类似工具中求平均值来缩小 3D 矩阵的大小

有没有一种简单的方法可以通过在NumpyScipy中平均特定大小的块,甚至使用 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 子矩阵的结果。

或者,代码可以获取所需的矩阵大小作为输入,而不是子矩阵的大小并计算出来。

谢谢

numpy matrix scipy

4
推荐指数
1
解决办法
993
查看次数

查找限制输入值的 numpy 数组值

我有一个值,比如 2016 和一个排序的 numpy 数组:[2005, 2010, 2015, 2020, 2025, 2030]。在数组中查找绑定 2016 的 2 个值的 Pythonic 方法是什么?在本例中,答案将是一个数组 [2015, 2020]。

不知道除了循环之外如何做到这一点,但希望有一个更基于 numpy 的解决方案

- 编辑:

你可以假设你永远不会得到数组中的值,我对此进行了预过滤

python numpy

4
推荐指数
1
解决办法
1213
查看次数

如何有效获取 Pandas DataFrame 中行之间的日志变化率?

假设我有一些 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)

python numpy series dataframe pandas

4
推荐指数
1
解决办法
2487
查看次数

Numpy:使用一个矩阵作为另一个矩阵的索引来创建张量?

下面的代码将如何工作?

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)

python numpy matrix

4
推荐指数
1
解决办法
8690
查看次数

转换为 DMatrix 后,XGBoost 训练和测试特征的差异

只是想知道下一种情况怎么可能:

 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)

python numpy machine-learning python-2.7 xgboost

4
推荐指数
1
解决办法
5778
查看次数

如何将图像集合中的像素(R、G、B)映射到不同的像素颜色值索引?

假设有 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 performance numpy image image-processing

4
推荐指数
1
解决办法
3087
查看次数

了解如何为 numpy 的 reshape() 指定 newshape 参数

我是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)

python numpy

4
推荐指数
1
解决办法
2423
查看次数