为什么[]在使用时将空列表推断为浮点类型np.append?
np.append([1,2,3], [0])
# output: array([1, 2, 3, 0]), dtype = np.int64
np.append([1,2,3], [])
# output: array([1., 2., 3.]), dtype = np.float64
Run Code Online (Sandbox Code Playgroud)
即使使用np.array([1,2,3], dtype=np.int32)as ,这也是持久的arr。
无法为 append 指定 dtype,所以我很好奇为什么会发生这种情况。Numpy 的 concatenate 做同样的事情,但是当我尝试指定 dtype 时,我收到一个错误:
np.concatenate([[1,2,3], []], dtype=np.int64)
Run Code Online (Sandbox Code Playgroud)
错误:
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
但最后,如果我设置了不安全的铸造规则,它会起作用:
np.concatenate([[1,2,3], []], dtype=np.int64, casting='unsafe')
Run Code Online (Sandbox Code Playgroud)
为什么被[]认为是浮动?
我正在尝试将使用 d3js 版本 3 编写的力导向图更新为 d3js 版本 7。
以下代码片段是使用 d3js v3 的工作实现:
var svg = d3.select("svg"),
width = +svg.attr("width"),
height = +svg.attr("height");
graph = {
nodes: [],
links: [],
}
var simulation = d3.layout.force()
.size([width, height])
.nodes(graph.nodes)
.links(graph.links)
.on("tick", function() {
svg.selectAll('.link')
.attr("x1", function (d) { return d.source.x })
.attr("y1", function (d) { return d.source.y })
.attr("x2", function (d) { return d.target.x })
.attr("y2", function (d) { return d.target.y })
svg.selectAll('.node')
.attr("cx", function (d) { return d.x })
.attr("cy", function …Run Code Online (Sandbox Code Playgroud)我想按行号移动每一行,并与我想要的输出形状相关。一个例子:
array([[0, 1, 2], array([[0, 1, 2], array([[0, 1, 2, 0, 0],
[1, 2, 3], -> [1, 2, 3], -> [0, 1, 2, 3, 0],
[2, 3, 4]]) [2, 3, 4]]) [0, 0, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
最左边的数组是我的输入,最右边的数组是我想要的输出。这可以推广到更大的数组,例如10x10数组。
有没有很好的方法来做到这一点?
我所拥有的是:
A = np.array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]], dtype=np.float32)
out = np.zeros((A.shape[0], A.shape[1]*2-1))
out[[np.r_[:3]], [np.r_[:3] + np.r_[:3][:,None]]] = A
Run Code Online (Sandbox Code Playgroud) 我有以下场景:
use num_bigint::BigUint;
fn add_one(px: BigUint, py: BigUint) -> (BigUint, BigUint) {
(px+1u32, py+1u32)
}
fn test(x: &[u8], y: &[u8]) {
let mut x = BigUint::from_bytes_le(x);
let mut y = BigUint::from_bytes_le(y);
(x,y) = add_one(x, y);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,出现以下编译错误:
error[E0658]: destructuring assignments are unstable
--> src/lib.rs:76:11
|
76 | (x,y) = ecc_add(x, y);
| ----- ^
| |
| cannot assign to this expression
|
= note: see issue #71126 <https://github.com/rust-lang/rust/issues/71126> for more information
Run Code Online (Sandbox Code Playgroud)
这是什么意思?let (x,y) = add_one(x, y);似乎修复了错误,但我认为这不会改变原始x …
我正在遵循使用serde. 它提供了使用 Serde 的 JSON 序列化器的基本实现。假设我只想序列化无符号整数u8,u16和u32。是否可以以某种方式指定此约束并在用户尝试序列化任何其他类型(例如等)时抛出string错误f32?
我也许可以写
fn serialize_string(self, v: string) -> Result<()> {
return Err(Error::Message("Undefined".to_owned()));
}
fn serialize_f32(self, v: f32) -> Result<()> {
return Err(Error::Message("Undefined".to_owned()));
}
/* and so forth */
Run Code Online (Sandbox Code Playgroud)
但这感觉太冗长了。
是否可以定义一个用于序列化自定义类型的协议?例如,我可能有一个Point包含两个坐标x和 的结构y。我想Point以压缩格式进行序列化,如下所述: https: //bitcoin.stackexchange.com/a/84588,即将第一个坐标序列化为x任何其他无符号整数,但添加一个小前缀来指示坐标y是偶数还是奇数。然后可以使用前缀(有条件的)派生y出。x
我为 numpy 库编写了一个 c 扩展,用于计算特定类型的 bincount。由于缺少更好的名称,我们调用它fast_compiled并将方法签名放在numpy/core/src/multiarray/multiarraymodule.c里面array_module_methods:
{"fast_compiled", (PyCFunction)arr_fast_compiled,
METH_VARARGS | METH_KEYWORDS, NULL},
Run Code Online (Sandbox Code Playgroud)
以及numpy/core/src/multiarray/compiled_base.c(和compiled_base.h)中的实际实现:
NPY_NO_EXPORT PyObject *
arr_fast_compiled(PyObject *NPY_UNUSED(self), PyObject *args, PyObject *kwds)
{
PyObject *list_obj = NULL, *strides_obj = Py_None;
PyArrayObject *list_arr = NULL, *ans = NULL, *strides_arr = NULL;
npy_intp len, ans_size, total_size;
npy_intp i, j, k;
double *dans, *weights;
npy_intp* strides;
static char *kwlist[] = {"weights", "strides", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O",
kwlist, &list_obj, &strides_obj)) {
goto fail; …Run Code Online (Sandbox Code Playgroud) 我想展平一个包含&[u8]以下内容的向量:
fn main() {
let x: &[u8] = &b"abc"[..];
let y: &[u8] = &b"def"[..];
let z: Vec<&[u8]> = vec![x, y];
println!("z: {:?}", z);
let z_flat: &[u8] = z.into_iter().flatten().collect();
println!("z_flat: {:?}", z_flat);
}
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误:
fn main() {
let x: &[u8] = &b"abc"[..];
let y: &[u8] = &b"def"[..];
let z: Vec<&[u8]> = vec![x, y];
println!("z: {:?}", z);
let z_flat: &[u8] = z.into_iter().flatten().collect();
println!("z_flat: {:?}", z_flat);
}
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下方法:
let z_flat: &[u8] = &z.into_iter().map(|x| x.to_vec()).flatten().collect();
Run Code Online (Sandbox Code Playgroud)
编译错误:
error[E0277]: a value of type `&[u8]` …Run Code Online (Sandbox Code Playgroud)