小编sha*_*aia的帖子

将矩阵转换为堆叠向量,其中每行的最后一个非零值之后的所有零都被移除

我有一个矩阵,我想要擦除一些零值.

a=[ 1 2 3 0 0; 1 0 1 3 2; 0 1 2 5 0]

>>a =

 1     2     3     0     0
 1     0     1     3     2
 0     1     2     5     0
Run Code Online (Sandbox Code Playgroud)

但是,我想只擦除每行的最后一个非零值之后的那些.这意味着我想保留1 2 3第一行,1 0 1 3 2第二行和0 1 2 5第三行.

我想将剩余的值存储在向量中.在示例的情况下,这将导致向量

b=[1 2 3 1 0 1 3 2 0 1 2 5]
Run Code Online (Sandbox Code Playgroud)

我想出的唯一方法涉及一个for我想避免的循环:

b=[];
for ii=1:size(a,1)
    l=max(find(a(ii,:)));
    b=[b a(ii,1:l)];
end
Run Code Online (Sandbox Code Playgroud)

有没有办法对这段代码进行矢量化?

matlab vector matrix vectorization

7
推荐指数
2
解决办法
107
查看次数

如果值是多个,熊猫会在一个组中删除值

我有一个带有一id列和一quantity列的数据框,可以是 0 或 1。

import pandas as pd

df = pd.DataFrame([
{'id': 'thing 1', 'date': '2016-01-01', 'quantity': 0 },
  {'id': 'thing 1', 'date': '2016-02-01', 'quantity': 0 },
  {'id': 'thing 1', 'date': '2016-09-01', 'quantity': 1 },
  {'id': 'thing 1', 'date': '2016-10-01', 'quantity': 1 },
  {'id': 'thing 2', 'date': '2017-01-01', 'quantity': 1 },
  {'id': 'thing 2', 'date': '2017-02-01', 'quantity': 1 },
  {'id': 'thing 2', 'date': '2017-02-11', 'quantity': 1 },
  {'id': 'thing 3', 'date': '2017-09-01', 'quantity': 0 },
  {'id': …
Run Code Online (Sandbox Code Playgroud)

pandas pandas-groupby

7
推荐指数
2
解决办法
53
查看次数

pandas——将数据追加到系列中,同时增加日期时间索引

我有一个数据框

import pandas as pd
import datetime

#Create data
df = {'Day': ['2012-12-29','2013-01-05'],
      'Whatev': [1,0]}
index = range(len(df['Day']))
columns = ['Day','Whatev']
df = pd.DataFrame(df,  index=index, columns=columns)
print(df)
print()
Run Code Online (Sandbox Code Playgroud)

我从中提取第一列作为一个系列:

#Index to datetime
df['Day'] = pd.to_datetime(df['Day'])
df.set_index('Day', inplace=True) #use day as index


#Create series from dataframe column
s = df[df.columns[0]]
print(s)
print()
Run Code Online (Sandbox Code Playgroud)

我想在末尾附加零值。因此,首先我扩展日期时间索引,然后将最后一个值指定为零:

#Append 1 data to series
last_date = s.iloc[[-1]].index + datetime.timedelta(days=7)
s.append(pd.DataFrame(index=[last_date]))
s.iloc[[-1]]=0
print(s)
print()
Run Code Online (Sandbox Code Playgroud)

是的,我没有工作。在测试过程中,它似乎有效,但在这里,不知何故,数据帧没有改变。到底是哪一个原因呢?

另外,有没有更聪明的方法来实现结果?事实上,如果我想附加多个值,我的解决方案看起来不太漂亮:

#Append many data to series
L = 2 #hoe many zeros
i=0 …
Run Code Online (Sandbox Code Playgroud)

python series pandas

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

在圆圈上移动平均值

有没有办法以一种方式计算移动平均值,使得数组开头和结尾的值与对端的值平均?

例如,而不是这个结果:

A=[2 1 2 4 6 1 1];
movmean(A,2)
ans = 2.0 1.5 1.5 3.0 5 3.5 1.0
Run Code Online (Sandbox Code Playgroud)

我想获得向量[1.5 1.5 1.5 3 5 3.5 1.0],因为初始数组元素2将与结束元素1平均.

matlab mean

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

将列表列表中的所有列表相乘

我有一个掩码列表,我想通过将所有掩码相乘来获得结果掩码。我的大金刚方法如下:

a = [[1, 1], [1, 0], [1, 0]]
b = a[0]
for i in range(1, len(a)):
    b = b * np.array(a[i])
Run Code Online (Sandbox Code Playgroud)

我认为它的作用是[1,0]作为 的值的回报b

有更好的方法吗?


编辑:我正在寻找面具中的常见范围。为了找到所有非零范围,我执行以下操作:label = 0

for i in range(1, len(labels)):
   label = label + np.array(labels[i])
label = [1 if x > 0 else 0 for x in label]
Run Code Online (Sandbox Code Playgroud)

python

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

pandas Group通过绘制每个组

我有一些数据,我想从中提取不同产品(和)的收入时间序列(Dollars不同Day地点不同日期的总和) 。Wherexy

import pandas as pd

#Create data
data = {'Day': [1,1,2,2,3,3],
        'Where': ['A','B','A','B','B','B'],
        'What': ['x','y','x','x','x','y'],
        'Dollars': [100,200,100,100,100,200]}

index = range(len(data['Day']))

columns = ['Day','Where','What','Dollars']


df = pd.DataFrame(data,  index=index, columns=columns)
df
Run Code Online (Sandbox Code Playgroud)

滴滴

为此,我将数据按Day和分组What并求和Dollars

#Group by Day and What and sum Dollars (for each Where)
print(df.groupby(['Day', 'What'])['Dollars'].sum())
Run Code Online (Sandbox Code Playgroud)

ccc

现在,我想制作一个时间序列,x如下y所示:

三、

我尝试了以下方法,但显然不起作用:

items = df.What.unique()

ax = plt.figure()
for item in items:
    df_tmp = df[['Day']][df.What == item]
    plt.plot(df_tmp['Day'],df_tmp,'.-',label=item)
Run Code Online (Sandbox Code Playgroud)

FF

有人可以帮我指明正确的方向吗?有没有更快的方法来获得正确的结果?

python matplotlib dataframe pandas pandas-groupby

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

在第一个空行之前插入变量中分配的文本

我有一些$f类似于以下内容的文本文件

function
%blah
%blah

%blah
code here
Run Code Online (Sandbox Code Playgroud)

我想在第一个空行之前附加以下文本:

%
%This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 
%3.0 Unported License. See notes at the end of this file for more information.
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

top=$(cat ./PATH/text.txt) 
top="${top//$'\n'/\\n}" 
sed -i.bak 's@^$@'"$top"'\\n@' $f
Run Code Online (Sandbox Code Playgroud)

其中第二行(我认为)保留文本中的新行,第三行(我认为)用文本加上新的空行替换第一个空行。

两个问题:

1-我的代码附加以下文本:

%n%本作品根据 Creative Commons Attribution-NonCommercial-ShareAlike n%3.0 Unported License 获得许可。有关详细信息,请参阅此文件末尾的注释。\n

2- 将其附加到文件末尾。

有人可以帮助我理解我的代码的问题吗?

bash sed

3
推荐指数
1
解决办法
1145
查看次数

pytorch - is_overridden 中的 Model_heplers.py > raise ValueError(“需要父级”)

我正在一个新的远程服务器上运行一个曾经在另一个远程服务器上工作的代码。我想我以同样的方式设置,但是当我运行我的训练脚本时,我收到此错误:

Traceback (most recent call last):
  File "/home/andrea/code/vertikal-machine-learning/source/model/hss_bearing_mk2/hss_bearing_mk2/models/train_model.py", line 144, in <module>
    seq_len=seq_len, mname=mname)
  File "/home/andrea/code/vertikal-machine-learning/source/model/hss_bearing_mk2/hss_bearing_mk2/models/pytorch_models.py", line 321, in train_test
    trainer.fit(model, datamodule=dm)
  File "/home/andrea/anaconda3/envs/hss_bearing_mk2/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 552, in fit
    self._run(model)
  File "/home/andrea/anaconda3/envs/hss_bearing_mk2/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 849, in _run
    self.config_validator.verify_loop_configurations(model)
  File "/home/andrea/anaconda3/envs/hss_bearing_mk2/lib/python3.7/site-packages/pytorch_lightning/trainer/configuration_validator.py", line 34, in verify_loop_configurations
    self.__verify_train_loop_configuration(model)
  File "/home/andrea/anaconda3/envs/hss_bearing_mk2/lib/python3.7/site-packages/pytorch_lightning/trainer/configuration_validator.py", line 49, in __verify_train_loop_configuration
    has_training_step = is_overridden("training_step", model)
  File "/home/andrea/anaconda3/envs/hss_bearing_mk2/lib/python3.7/site-packages/pytorch_lightning/utilities/model_helpers.py", line 45, in is_overridden
    raise ValueError("Expected a parent")
ValueError: Expected a parent
Run Code Online (Sandbox Code Playgroud)

这是由于某种原因看起来有错误的代码部分:

    model = get_model(mname=mname)

    dm = DataModule(
        X_train=X_train,
        y_train=y_train,
        X_val=X_val,
        y_val=y_val,
        X_test=X_test,
        y_test=y_test, …
Run Code Online (Sandbox Code Playgroud)

python pytorch

3
推荐指数
1
解决办法
3549
查看次数

如何制作连续堆叠条形图

有人知道如何用matlab制作类似于这个的图形吗?

在此输入图像描述

对我来说,这似乎是一个连续的堆积条形图.

我没有设法下载相同的数据,所以我使用其他数据.

我尝试了以下代码:

clear all

filename = 'C:\Users\andre\Desktop\GDPpercapitaconstant2000US.xlsx';
sheet = 'Data';
xlRange = 'AP5:AP259'; %for example

A = xlsread(filename,sheet,xlRange);

A(isnan(A))=[]; %remove NaNs

%create four subsets
A1=A(1:70);
A2=A(71:150);
A3=A(151:180);
A4=A(181:end);


edges=80:200:8000; %bins of the distributions

[n_A1,xout_A1] = histc(A1,edges); %distributions of the first subset
[n_A2,xout_A2] = histc(A2,edges);
[n_A3,xout_A3] = histc(A3,edges);
[n_A4,xout_A4] = histc(A4,edges);

%make stacked bar plot
for ii=1:numel(edges)
    y(ii,:) = [n_A1(ii) n_A2(ii) n_A3(ii) n_A4(ii)];
end

bar(y,'stacked', 'BarWidth', 1)
Run Code Online (Sandbox Code Playgroud)

得到了这个:

在此输入图像描述

它并不是那么糟糕.也许与其他数据相比它看起来更好......但我想知道是否有人有更好的想法.也许有可能以fitdist类似的方式适应?

matlab

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

传播一个非零元素的岛屿

我有一个矩阵与一些非零(让我们说=11)元素

a=zeros(6,3);
a(3,1)=11;
a(4,1)=11;
a(6,1)=11;
a(1,2)=11;
a

a =

     0    11     0
     0     0     0
    11     0     0
    11     0     0
     0     0     0
    11     0     0
Run Code Online (Sandbox Code Playgroud)

我希望这些元素"扩散"到相邻的零元素,这意味着所有与非零相邻的零元素应该变为非零.上述案例的预期输出应为:

11    11    11
11    11     0
11    11     0
11    11     0
11     0     0
11    11     0
Run Code Online (Sandbox Code Playgroud)

我的想法是将原始矩阵的梯度非零的所有点设置为非零:

[dx,dy] = gradient(a);
a(find(dx~=0))=11
a(find(dy~=0))=11
Run Code Online (Sandbox Code Playgroud)

a =

11    11    11
 0     0     0
11    11     0
11    11     0
 0     0     0
11    11     0
Run Code Online (Sandbox Code Playgroud)

a =

11    11    11
11 …
Run Code Online (Sandbox Code Playgroud)

matlab matrix

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