我想将下面的值标准化为水平而不是垂直。代码读取代码后提供的csv文件,并输出具有标准化值的新csv文件。如何使其水平标准化?给出如下代码:
码
#norm_code.py
#normalization = x-min/max-min
import numpy as np
from sklearn import preprocessing
all_data=np.loadtxt(open("c:/Python27/test.csv","r"),
delimiter=",",
skiprows=0,
dtype=np.float64)
x=all_data[:]
print('total number of samples (rows):', x.shape[0])
print('total number of features (columns):', x.shape[1])
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(x)
X_minmax=minmax_scale.transform(x)
with open('test_norm.csv',"w") as f:
f.write("\n".join(",".join(map(str, x)) for x in (X_minmax)))
Run Code Online (Sandbox Code Playgroud)
test.csv
1 2 0 4 3
3 2 1 1 0
2 1 1 0 1
Run Code Online (Sandbox Code Playgroud) 我使用相同的数据但不同的 python 库来计算决定系数 R^2。使用 stats 库和 sklearn 会产生不同的结果。
这种行为背后的原因是什么?
# Using stats lineregress
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print r_value**2
Run Code Online (Sandbox Code Playgroud)
0.956590054918
# Using sklearn
from sklearn.metrics import r2_score
print r2_score(x, y)
Run Code Online (Sandbox Code Playgroud)
0.603933484937
Qt静默捕获Python回调中的异常,并以错误代码退出程序。这可以用一个简短的例子来证明:
import sys
from PyQt5 import QtWidgets
# _excepthook = sys.excepthook
# def exception_hook(exctype, value, traceback):
# _excepthook(exctype, value, traceback)
# sys.excepthook = exception_hook
class Test(QtWidgets.QPushButton):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setText("hello")
self.clicked.connect(self.buttonClicked)
def buttonClicked(self):
print("clicked")
raise Exception("wow")
app = QtWidgets.QApplication(sys.argv)
t = Test()
t.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
点击按钮,我们得到
点击了
流程以退出代码1完成
这个答案(我修改了该示例)显示了如何安装自定义异常挂钩。因此,让我们取消上面示例中的代码行注释。现在,它打印回溯,并且每次我们单击该按钮时都不会退出程序。
自定义函数只是旧函数的一个薄包装。为什么在引发异常时会导致不同的行为?
我想从 Rust 程序构建一个动态库并将其链接到现有的 C++ 项目。对于 C++ 项目,我们一直坚持使用 gcc 进行编译(一个相对较旧的 gcc 4.8.2,但我也在尝试使用 gcc 7.3.0 进行同样的问题)。
这是该问题的最小示例:
源代码/库.rs
#[no_mangle]
pub unsafe extern "C" fn hello() {
println!("Hello World, Rust here!");
}
Run Code Online (Sandbox Code Playgroud)
Cargo.toml
[package]
name = "gcc-linking"
version = "0.1.0"
authors = ..
edition = "2018"
[lib]
crate-type = ["dylib"]
[dependencies]
Run Code Online (Sandbox Code Playgroud)
你好.cpp:
extern "C" void hello();
int main() {
hello();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我与 链接时clang,一切都很好:
cargo build --lib
clang -L target/debug -l gcc_linking hello.cpp -o hello
LD_LIBRARY_PATH=target/debug:$LD_LIBRARY_PATH ./hello
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这会导致:
Hello World, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个宏,以便方便地将类型变量中的嵌套结构enum与编译时模板相匹配。这个想法是利用 Rust 的模式匹配在结构的某些位置强制执行特定值,或将变量绑定到其他有趣的位置。基本思想在我的实现中有效,但对于嵌套模式却失败了。我相信问题在于,一旦宏输入的一部分被解析为$<name>:pat它以后无法解析为$<name>:tt.
为了避免术语模式的使用不明确,我将根据 Rust 文档使用以下表示法:
matchif let$<name>:pat。这是我正在使用的类型的简化版本enum:
#[derive(Debug, Clone)]
enum TaggedValue {
Str(&'static str),
Seq(Vec<TaggedValue>),
}
Run Code Online (Sandbox Code Playgroud)
例如,下面的表达式
use TaggedValue::*;
let expression = Seq(vec![
Str("define"),
Seq(vec![Str("mul"), Str("x"), Str("y")]),
Seq(vec![Str("*"), Str("x"), Str("y")]),
]);
Run Code Online (Sandbox Code Playgroud)
可以通过这个宏调用来匹配:
match_template!(
&expression, // dynamic input structure
{ println!("fn {}: {:?}", name, body) }, // action to take after successful match
[Str("define"), [Str(name), _, _], …Run Code Online (Sandbox Code Playgroud) 我在箱子中有以下注释的代码:
/// Complex Expression
///
/// - The `Undefined` variant is used as a placeholder during code
/// transformations. It must never occur in the final result.
pub enum Cexp {
Undefined,
Unimplemented,
}
Run Code Online (Sandbox Code Playgroud)
在cargo test板条箱上运行时,它会触发doctest运行,但无法编译。(请确保在操场上运行“测试”而不是“构建”。)
/// Complex Expression
///
/// - The `Undefined` variant is used as a placeholder during code
/// transformations. It must never occur in the final result.
pub enum Cexp {
Undefined,
Unimplemented,
}
Run Code Online (Sandbox Code Playgroud)
实际的错误消息无关紧要。锈编译器使注释文本窒息,这并不奇怪。但是,为什么此注释触发doctest运行?根据文档, doctests应该与围起来```,这里不是这种情况。
考虑以下代码:
def inner(a):
if a == 75:
raise RuntimeError()
return a**2
def outer():
results = []
for a in range(100):
results.append(inner(a))
return results
outer()
Run Code Online (Sandbox Code Playgroud)
在 IPython 中,在引发异常后,%debug行魔术会在以下范围内打开 python 调试器inner():
In [4]: %debug
> <ipython-input-3-eff43b15b2ef>(3)inner()
2 if a == 75:
----> 3 raise RuntimeError()
4 return a**2
ipdb> a
a = 75
ipdb> results
*** NameError: name 'results' is not defined
Run Code Online (Sandbox Code Playgroud)
如何告诉 (i)pdb 进入范围outer()以保存到目前为止生成的结果?
我希望能够计算平均值,最小值和最大值A:
import numpy as np
A = ['33.33', '33.33', '33.33', '33.37']
NA = np.asarray(A)
AVG = np.mean(NA, axis=0)
print AVG
Run Code Online (Sandbox Code Playgroud)
这不起作用,除非转换为:
A = [33.33, 33.33, 33.33, 33.37]
Run Code Online (Sandbox Code Playgroud)
是否可以自动执行此转换?
我需要执行一个FFI签名:
pub unsafe extern fn f(header_size: u32, header_ptr: *mut u8) -> i32;
Run Code Online (Sandbox Code Playgroud)
FFI调用程序应提供一个缓冲区header_ptr以及该缓冲区的大小header_size。预期Rust会将一个字符串填充到该缓冲区中,直到header_size,0如果成功,则返回。FFI调用程序应将字符串解释为ASCII。
给定headers: &str我要提供的内容,如何以最惯用的方式填充该缓冲区?
现在我有:
let header_bytes = slice::from_raw_parts_mut(header_ptr, header_size as usize);
if header_bytes.len() < headers.len() { return Errors::IndexOutOfBounds as i32; }
for (i, byte) in headers.as_bytes().iter().enumerate() {
header_bytes[i] = *byte;
}
Run Code Online (Sandbox Code Playgroud)
但这感觉不对。
编辑,我认为这是不完全相同的副本来这个,因为我的问题涉及到字符串,STR转换和对CStrings时IIRC有特殊的考虑。
默认情况下,刻度标签在它们所属的子图轴上对齐。是否可以对齐标签,使它们位于两个子图之间的中心?
import numpy as np
import matplotlib.pyplot as plt
data = [7, 2, 3, 0]
diff = [d - data[0] for d in data]
y = np.arange(len(data))
ax1 = plt.subplot(1, 2, 1)
ax1.barh(y, diff)
ax1.set_yticks(y + 0.4)
ax1.yaxis.set_major_formatter(matplotlib.ticker.NullFormatter())
ax2 = plt.subplot(1, 2, 2)
ax2.barh(y, data)
ax2.set_yticks(y + 0.4)
ax2.set_yticklabels(['reference', 'something', 'something else', 'nothing', ])
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
