如果我们具有max..min值的具体范围,很容易将其标准化为0..1浮点值,但是如果我们没有具体限制?是否可以构建通用函数以使输出在0和1之间?在我看来,我认为这是不可能的,但我不是数学专家.
我正在寻找JavaScript或PHP的实现,但是C/C++/Python/Delphi上的任何代码都可以提供示例(如果有的话)
我正在尝试按项目规范化StrengthCode
例如
ID Item StrengthCode
7 A 1
7 A 5
7 A 7
8 B 1
8 B 3
9 A 5
9 A 3
Run Code Online (Sandbox Code Playgroud)
我需要实现的是这样的:
ID Item StrengthCode Nor
7 A 1 0.14
7 A 5 0.71
7 A 7 1
8 B 1 0.34
8 B 3 1
9 A 5 0.71
9 A 3 0.42
Run Code Online (Sandbox Code Playgroud)
我尝试了这段代码,但是我被困了......如果你能帮助我会很棒!!!
normalit <- function(m){(m - min(m))/(max(m)-min(m))}
Tbl.Test <- Tbl.3.1 %>%
group_by(ID, Item) %>%
mutate(Nor = normalit(StregthCode))
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
强制引入的警告消息NAs
我正在尝试采用矩阵并将每个单元格中的值标准化为该列的平均值.通过标准化,我的意思是从该列中的平均值中减去每个单元格中的值,即从Column1中的值中减去Column1的平均值...从ColumnN中的值减去ColumnN的平均值.我在Matlab中寻找脚本.谢谢!
我的代码中有一个简短的方法来规范化矢量(实际上是PCL点),这会产生低精度的结果.代码:
void normalize(pcl::PointXYZ::PointXYZ * p){
float nf = 1/sqrt(p->x*p->x+p->y*p->y+p->z*p->z);
//nf is a normalization factor precalculated to eliminate two FP divisions.
p->x*=nf; p->y*=nf; p->z*=nf;
}
Run Code Online (Sandbox Code Playgroud)
该函数通过坐标点传递(-0.850650787, 1.37638187, -0.525731087).调试显示nf=0.587785244在评估第二行之后.当我在Mathematica中进行相同的计算时,nf=0.617708029.这是一个超过5%的错误!p的坐标绝不大于2或小于-2.这些操作的典型不准确,还是有问题?
我有一个用双精度表示的rgb图像矩阵(高度*宽度*3).在对矩阵进行一些操作之后,一些值变为biger然后是1或小于0.我需要将这些值归一化为1和0.谢谢.
我想规范化我从这个给定代码得到的tfidf结果:
for (int docNum = 0; docNum < ir.numDocs(); docNum++) {
TermFreqVector tfv = ir.getTermFreqVector(docNum, "contents");
if (tfv == null) {
// ignore empty fields
continue;
}
String[] tterms = tfv.getTerms();
int termCount = tterms.length;
int[] freqs = tfv.getTermFrequencies();
for (int t = 0; t < termCount; t++) {
double idf = ir.numDocs() / ir.docFreq(new Term("contents", tterms[t]));
System.out.println(" " + tterms[t] + " " + freqs[t]*Math.log(idf));
}
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出是:
area 0.0
areola 5.877735781779639
ari 3.9318256327243257
art 1.6094379124341003
artifici 1.0986122886681098
assign …Run Code Online (Sandbox Code Playgroud) 如何规范化多索引数据框?
假设我有数据帧:
d = pd.DataFrame([["a",1,3],["a",2,2],["b",4,4],["b",5,8]],
columns=["name","value1","value2"])
Run Code Online (Sandbox Code Playgroud)
如何计算每个"名称"的标准化值?
我知道如何规范化基本数据帧:
d = (d-d.mean(axis=0))/data.std(axis=0, ddof=1)
Run Code Online (Sandbox Code Playgroud)
但是我无法在我的数据帧的每个"名称"组中应用它
所以我想要的结果是:
name, value1, value2
a -0.5 0.5
a 0.5 -0.5
b -0.5 -1
b 0.5 1
Run Code Online (Sandbox Code Playgroud)
我尝试了groupby和一个多索引数据框,但可能我没有以正确的方式做到这一点
我有两套不同的尺寸,我想在同一直方图上绘制.然而,由于一组具有~330,000个值而另一组具有大约~16,000个值,因此它们的频率直方图难以比较.我想绘制比较两组的直方图,使得y轴是该区域中出现的百分比.下面我的代码获取接近此,除了不是具有单个分级值总和为1.0,直方图总和为1.0的积分(这是因为范= True参数的).
我怎样才能实现目标?我已经尝试过手动计算%频率并使用plt.bar()但不是覆盖图,而是将图并排比较.我想保持alpha = 0.5的效果
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
if plt.get_fignums():
plt.close('all')
electric = pd.read_csv('electric.tsv', sep='\t')
gas = pd.read_csv('gas.tsv', sep='\t')
electric_df = pd.DataFrame(electric)
gas_df = pd.DataFrame(ngma_nonheat)
electric = electric_df['avg_daily']*30
gas = gas_df['avg_daily']*30
## Create a plot for NGMA gas usage
plt.figure("Usage Comparison")
weights_electric = np.ones_like(electric)/float(len(electric))
weights_gas = np.ones_like(gas)/float(len(gas))
bins=np.linspace(0, 200, num=50)
n, bins, rectangles = plt.hist(electric, bins, alpha=0.5, label='electric usage', normed=True, weights=weights_electric)
plt.hist(gas, bins, alpha=0.5, label='gas usage', normed=True, weights=weights_gas)
plt.legend(loc='upper right')
plt.xlabel('Average …Run Code Online (Sandbox Code Playgroud) 这是我正在使用 2 条记录的示例 json 文件:
[{"Time":"2016-01-10",
"ID"
:13567,
"Content":{
"Event":"UPDATE",
"Id":{"EventID":"ABCDEFG"},
"Story":[{
"@ContentCat":"News",
"Body":"Related Meeting Memo: Engagement with target firm for potential M&A. Please be on call this weekend for news updates.",
"BodyTextType":"PLAIN_TEXT",
"DerivedId":{"Entity":[{"Id":"Amy","Score":70}, {"Id":"Jon","Score":70}]},
"DerivedTopics":{"Topics":[
{"Id":"Meeting","Score":70},
{"Id":"Performance","Score":70},
{"Id":"Engagement","Score":100},
{"Id":"Salary","Score":70},
{"Id":"Career","Score":100}]
},
"HotLevel":0,
"LanguageString":"ENGLISH",
"Metadata":{"ClassNum":50,
"Headline":"Attn: Weekend",
"WireId":2035,
"WireName":"IIS"},
"Version":"Original"}
]},
"yyyymmdd":"20160110",
"month":201601},
{"Time":"2016-01-12",
"ID":13568,
"Content":{
"Event":"DEAL",
"Id":{"EventID":"ABCDEFG2"},
"Story":[{
"@ContentCat":"Details",
"Body":"Test email contents",
"BodyTextType":"PLAIN_TEXT",
"DerivedId":{"Entity":[{"Id":"Bob","Score":100}, {"Id":"Jon","Score":70}, {"Id":"Jack","Score":60}]},
"DerivedTopics":{"Topics":[
{"Id":"Meeting","Score":70},
{"Id":"Engagement","Score":100},
{"Id":"Salary","Score":70},
{"Id":"Career","Score":100}]
},
"HotLevel":0,
"LanguageString":"ENGLISH",
"Metadata":{"ClassNum":70,
"Headline":"Attn: Weekend",
"WireId":2037,
"WireName":"IIS"}, …Run Code Online (Sandbox Code Playgroud) 我收到了单个 JSON(500 个 JSON),并通过使用append()方法将它们添加到现有列表的末尾来对其进行修改。
d_path = r'--PATH HERE--'
d_files = [f for f in listdir(d_path) if isfile(join(d_path,f))]
n = num_data
d_dicts=[]
for counter,d_file in enumerate(d_files):
with open(d_path+'\\'+d_file,encoding="utf8") as json_data:
d_dicts.append(json.load(json_data))
if counter == num_data:
break
Run Code Online (Sandbox Code Playgroud)
在此步骤之后,我尝试使用 json_normalize 将 JSON 数据规范化为平面表(总共 500 行的 Pandas DataFrame)。
df = json_normalize(d)
Run Code Online (Sandbox Code Playgroud)
附加信息:
class 'pandas.core.frame.DataFrame'
dtypes: float64(8), int64(3), object(9)
到目前为止,除了一栏之外,一切进展顺利。我最终得到了一列,每一行都有一个字典列表。我试图寻找一种解决方案,但找不到对我有帮助的解决方案。每行都有一个嵌套字典。
以下是名为Info_column的列的三行示例,其中包含虚构数据但结构相同:
Info_column
[{**'Greeting':** 'Good day', 'Group': '1.2', 'Window': None,
'Value1': 17.0, 'Value2': 13.23, 'Value3': 11.0,
'Date1': '2013-09-04', 'Date2': '2012-09-05', 'Date3': '2015-07-22',
'Married': False, …Run Code Online (Sandbox Code Playgroud)