小编Pet*_*hor的帖子

整数之间的铸造是否昂贵?

我正在进行一项项目,我正在进行大量基于索引的计算.我有几行像:

let mut current_x: usize = (start.x as isize + i as isize * delta_x) as usize;
Run Code Online (Sandbox Code Playgroud)

start.x并且iusizes和delta_x类型isize.我的大多数数据都是无符号的,因此将其签名存储没有多大意义.另一方面,当我操作一个数组时,我正在访问很多,我必须将所有内容转换回来,usize如上所示.

整数之间的铸造是否昂贵?它对运行时性能有影响吗?

还有其他方法可以更轻松/更有效地处理索引算术吗?

rust

8
推荐指数
1
解决办法
719
查看次数

TensorFlow 使用数组索引将 Tensor 分配给 Tensor

我想在 TensorFlow 中做类似这段 Numpy 代码的事情:

a = np.zeros([5, 2])
idx = np.random.randint(0, 2, (5,))
row_idx = np.arange(5)
a[row_idx, idx] = row_idx
Run Code Online (Sandbox Code Playgroud)

意思是用另一个张量索引一个 2D 张量的所有行,然后为其分配一个张量。我对如何实现这一目标完全一无所知。

到目前为止,我在 Tensorflow 中可以做的如下

a = tf.Variable(tf.zeros((5, 2)))
idx = tf.constant([0, 1, 1, 0, 1])
row_idx = tf.range(5)
indices = tf.transpose([row_idx, idx])
r = tf.gather_nd(a, indices)
tf.assign(r, row_idx) # This line does not work
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此操作时,在最后一行中出现以下错误:

AttributeError: 'Tensor' object has no attribute 'assign'
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?必须有一些很好的方法来做到这一点,我不想用 for 循环遍历数据并在每个元素的基础上手动分配它。我知道现在数组索引不像 Numpy 的功能那么先进,但这应该仍然是可能的。

python tensorflow

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

增量Minizinc中的变量数组元素

我想对特定的数组元素执行简单的递增操作:

最小的不工作示例:

array[1..2] of var 0..1: a = [0, 0];

constraint forall (i in 1..2) (
    a[i] = a[i] + 1
);

output ["\(a)"];

solve satisfy;
Run Code Online (Sandbox Code Playgroud)

这会产生minizinc输出

  WARNING: model inconsistency detected
  stack.mzn:3:
  in call 'forall'
  in array comprehension expression
    with i = 1
  stack.mzn:4:
  in binary '=' operator expression
=====UNSATISFIABLE=====
% stack.fzn:1: warning: model inconsistency detected before search.
Run Code Online (Sandbox Code Playgroud)

为什么这是模型中的不一致 - 为什么我不能引用当前数组元素的旧值?还有其他方法可以将当前数组元素增加1吗?

我是限制性解决的新手,所以我希望这不是一个非常愚蠢的问题.

constraint-programming minizinc

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