小编mga*_*gab的帖子

使用最后的非零值填充1d numpy数组的零值

假设我们有一个填充了一些int值的1d numpy数组.让我们说其中一些是0.

有没有办法,使用numpy数组的功能,0用找到的最后一个非零值填充所有值?

例如:

arr = np.array([1, 0, 0, 2, 0, 4, 6, 8, 0, 0, 0, 0, 2])
fill_zeros_with_last(arr)
print arr

[1 1 1 2 2 4 6 8 8 8 8 8 2]
Run Code Online (Sandbox Code Playgroud)

一种方法是使用此功能:

def fill_zeros_with_last(arr):
    last_val = None # I don't really care about the initial value
    for i in range(arr.size):
        if arr[i]:
            last_val = arr[i]
        elif last_val is not None:
            arr[i] = last_val
Run Code Online (Sandbox Code Playgroud)

但是,这是使用原始python for循环而不是利用numpy和 …

python numpy

11
推荐指数
2
解决办法
3296
查看次数

在 pandas 中进行使用时间插值时是否可以应用时间感知限制?

pandas.DataFrame.interpolate允许通过插入相邻值来填充缺失数据。在它接受的论点中,其中两个似乎与这个问题相关:methodlimit

\n
    \n
  • method:除其他可能的值外,接受"linear""time"。它们之间的区别在于"linear"假设等距行并忽略索引,而"time"插值则考虑索引定义的时间间隔
  • \n
\n
>>> df = pd.DataFrame({'vals': [11, np.nan, np.nan, 12, np.nan, 22]},\n...                   index=pd.to_datetime(['2020-02-02 11:00', '2020-02-02 11:06', '2020-02-02 11:30',\n...                                         '2020-02-02 12:00', '2020-02-02 16:00', '2020-02-02 22:00']))\n>>> df.assign(interp_linear=df.interpolate(method='linear'),\n...           interp_time=df.interpolate(method='time'))\n\n\xef\xbb\xbf                     vals  interp_linear  interp_time\n2020-02-02 11:00:00  11.0      11.000000         11.0\n2020-02-02 11:06:00   NaN      11.333333         11.1\n2020-02-02 11:30:00   NaN      11.666667         11.5\n2020-02-02 12:00:00  12.0      12.000000         12.0\n2020-02-02 16:00:00   NaN      17.000000         16.0\n2020-02-02 22:00:00  22.0      22.000000         22.0\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • limit:允许您根据缺失值的数量限制要使用插值填充的间隙的长度。它需要整数值,并定义为要填充的连续 NaN 的最大数量。虽然这种行为对于本案来说是绝对合理的method="linear",但对于本案来说似乎是有限的 …

python pandas

11
推荐指数
1
解决办法
720
查看次数

在水平图中使用seaborn pairplot比较1个独立变量与多个变量变量

pairplot来自seaborn 的函数允许在数据集中绘制成对关系.

根据文档(突出显示添加):

默认情况下,此函数将创建一个Axes网格,以便数据中的每个变量将在y轴上跨单个行共享,并在x轴上跨单个列共享.对角轴的处理方式不同,绘制一个图表以显示该列中变量的数据的单变量分布.

还可以显示变量的子集或在行和列上绘制不同的变量.

我只能找到一个为行和列分组不同变量的例子,这里(它是与PairGrid和pairplot()部分的Plotting成对关系下的第6个图).正如您所看到的,它正在针对相同的单个因变量(y_vars)绘制许多自变量(x_vars),结果非常好.

我正在尝试对许多依赖变量绘制一个单独的自变量.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

ages = np.random.gamma(6,3, size=50)
data = pd.DataFrame({"age": ages,
                     "weight": 80*ages**2/(ages**2+10**2)*np.random.normal(1,0.2,size=ages.shape),
                     "height": 1.80*ages**5/(ages**5+12**5)*np.random.normal(1,0.2,size=ages.shape),
                     "happiness": (1-ages*0.01*np.random.normal(1,0.3,size=ages.shape))})

pp = sns.pairplot(data=data,
                  x_vars=['age'],
                  y_vars=['weight', 'height', 'happiness'])
Run Code Online (Sandbox Code Playgroud)

问题是子图被垂直排列,我找不到改变它的方法.

在此输入图像描述

我知道那时平铺结构不会那么整洁,因为Y轴应该在每个子图上标记.另外,我知道我可以用这样的东西手工制作这些图:

fig, axes = plt.subplots(ncols=3)
for i, yvar in enumerate(['weight', 'height', 'happiness']):
    axes[i].scatter(data['age'],data[yvar])
Run Code Online (Sandbox Code Playgroud)

不过,我正在学习使用seaborn,我觉得界面非常方便,所以我想知道是否有办法.此外,这个例子非常简单,但对于更复杂的数据集,seaborn会为你提供更多的东西,这会使raw-matplotlib方法变得更加复杂得多(色调,开始)

python seaborn

10
推荐指数
1
解决办法
1万
查看次数

从Julia调用C函数并将2D数组作为指针作为参数传递

的背景

我正在尝试使用ccallJulia函数来使用C语言编写的代码.我知道如何将数组作为参数传递给期望的函数int *arg.例如,尝试使用此C函数

void sum_one(int *arr, int len)
{
  for (int i=0; i<len; i++){
    arr[i]++;
  }
}
Run Code Online (Sandbox Code Playgroud)

这个Julia代码有效

x = collect(Cint, 1:5)
ccall((:sum_one, "/path/to/mylib.so"), Void, (Ptr{Cint}, Cint), x, 5)
Run Code Online (Sandbox Code Playgroud)

问题

C函数似乎没那么直接,期望指向指针(int **arg)的指针被用作二维矩阵.说这个

void fill_matrix(int **arr, int row, int col)
{
  for (int i=0; i<row; i++){
    for (int j=0; j<col; j++){
      arr[i][j] = arr[i][j] + i + j*10;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我需要创建一个数组数组,以便C代码接受它:

xx = [zeros(Cint, 5) for i in 1:6]
ccall((:fill_matrix, "/path/to/mylib.so"),
       Void, …
Run Code Online (Sandbox Code Playgroud)

c julia

8
推荐指数
1
解决办法
1613
查看次数

使用 pip 安装 Python 包的开发版本,但具有稳定的依赖关系

背景

pip install命令默认安装 python 包的最新稳定版本(由PEP426指定的稳定版本)

--pre该命令的标志pip install告诉 pip 还考虑发布候选版本和 python 包的开发版本。但据我了解,pip install --pre packageA它将安装 的开发版本packageA,以及所有依赖项的开发版本。

问题是:

是否可以使用 pip 安装包的开发版本,但安装其所有依赖项的稳定版本?

尝试过的解决方案

我尝试过的一件事是安装软件包的稳定版本(具有稳定的依赖项),然后重新安装不带依赖项的开发版本: pip install packageA pip install --pre --no-deps --upgrade --force-reinstall packageA 但问题是,如果开发版本packageA添加了新的依赖项,则不会安装。

我缺少什么吗?谢谢!

python pip

6
推荐指数
1
解决办法
2万
查看次数

使用第二个数组作为参考对 numpy 数组的元素进行分类

假设我有一个具有有限数量唯一值的数组。说

data = array([30, 20, 30, 10, 20, 10, 20, 10, 30, 20, 20, 30, 30, 10, 30])
Run Code Online (Sandbox Code Playgroud)

而且我还有一个参考数组,其中包含在 中找到的所有唯一值data,没有重复且按特定顺序排列。说

reference = array([20, 10, 30])
Run Code Online (Sandbox Code Playgroud)

而且我想创建一个形状相同的数组,而不是data包含reference数组中的索引作为值,其中data找到数组中的每个元素。

换句话说,有datareference,我想创建一个数组indexes,使得以下内容成立。

data = reference[indexes]
Run Code Online (Sandbox Code Playgroud)

一个次优的计算indexes方法是使用 for 循环,像这样

indexes = np.zeros_like(data, dtype=int)
for i in range(data.size):
    indexes[i] = np.where(data[i] == reference)[0]
Run Code Online (Sandbox Code Playgroud)

但我很惊讶没有numpythonic(因此更快!)方法来做到这一点......有什么想法吗?

谢谢!

python arrays performance numpy

5
推荐指数
1
解决办法
4097
查看次数

Seaborn - FacetGrid轴在行/ y轴上跨列共享x轴

FacetGridfrom seaborn创建一个子网格,允许您探索数据集中的条件关系.

函数接受的两个关键字参数是sharexsharey,根据文档:

分享{x,y}:bool,可选

如果为true,则facet将跨行跨越列和/或x轴共享y轴.

但我没有看到任何其他方法来控制facets/subplots共享轴的方式.所以这里......

题:

有没有办法跨行和/或y轴跨行共享x轴?

我正在尝试获得不同条件(列和色调)的不同数量(行数)的密度图.因此,我希望我的子图可以跨行共享x轴和y轴,但不会跨列链接.

python matplotlib seaborn

5
推荐指数
1
解决办法
5200
查看次数

标签 统计

python ×6

numpy ×2

seaborn ×2

arrays ×1

c ×1

julia ×1

matplotlib ×1

pandas ×1

performance ×1

pip ×1