我有一个矩阵,我想要擦除一些零值.
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)
有没有办法对这段代码进行矢量化?
我有一个带有一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) 我有一个数据框
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) 有没有办法以一种方式计算移动平均值,使得数组开头和结尾的值与对端的值平均?
例如,而不是这个结果:
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平均.
我有一个掩码列表,我想通过将所有掩码相乘来获得结果掩码。我的大金刚方法如下:
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) 我有一些数据,我想从中提取不同产品(和)的收入时间序列(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)
现在,我想制作一个时间序列,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)
有人可以帮我指明正确的方向吗?有没有更快的方法来获得正确的结果?
我有一些$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- 将其附加到文件末尾。
有人可以帮助我理解我的代码的问题吗?
我正在一个新的远程服务器上运行一个曾经在另一个远程服务器上工作的代码。我想我以同样的方式设置,但是当我运行我的训练脚本时,我收到此错误:
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) 有人知道如何用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类似的方式适应?
我有一个矩阵与一些非零(让我们说=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 =
Run Code Online (Sandbox Code Playgroud)11 11 11 0 0 0 11 11 0 11 11 0 0 0 0 11 11 0a =
Run Code Online (Sandbox Code Playgroud)11 11 11 11 …