小编met*_*rem的帖子

没有参考平面的两个矢量之间的有符号角度

(三维)我正在寻找一种计算两个向量之间的有符号角度的方法,除了那些向量之外没有其他信息.正如在这个问题中所回答的那样,在给定矢量垂直的平面法线的情况下计算有符号角是很简单的.但是如果没有这个价值我就无法做到这一点.很明显,两个向量的交叉乘积产生了这样的正常,但是我使用上面的答案遇到了以下矛盾:

signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
Run Code Online (Sandbox Code Playgroud)

我希望第二个结果是否定的.这是因为cross(x_dir, y_dir)cross(y_dir, x_dir)给定以下具有标准化输入的伪代码的情况下,叉积与反方向相反:

signed_angle(Va, Vb)
    magnitude = acos(dot(Va, Vb))
    axis = cross(Va, Vb)
    dir = dot(Vb, cross(axis, Va))
    if dir < 0 then
        magnitude = -magnitude
    endif
    return magnitude
Run Code Online (Sandbox Code Playgroud)

我不相信dir永远不会消极.

我已经看到了建议的atan2解决方案的相同问题.

我正在寻找一种方法:

signed_angle(a, b) == -signed_angle(b, a)
Run Code Online (Sandbox Code Playgroud)

math 3d geometry vector

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

使用leiningen评估clojure文件的时间和次数是多少?

我发现在编写代码时添加了警告,这些代码编写了一个文件正文在编译期间执行两次的宏.是否有一个原因?这是leiningen特有的吗?我无法重现这一点(compile ...).

简化版:

(ns foo.core
    (:require foo.bar))

;; empty
Run Code Online (Sandbox Code Playgroud)
(ns foo.bar)

(println "hello")
Run Code Online (Sandbox Code Playgroud)

$ lein编译:全部

编译foo.core

hello

编译foo.bar

hello

进一步测试表明在编译期间命名空间在其自身上重新加载:

(ns foo.bar)

(declare wasd)
(println wasd)
(def wasd 2)
Run Code Online (Sandbox Code Playgroud)

$ lein干净

$ lein编译:全部

编译foo.core

#<Unbound Unbound: #'foo.bar/wasd>

编译foo.bar

2

在一个更复杂的情况下,我在编译期间发生这种情况,然后每次运行或从lein开始一次repl.我不知道为什么.这完全是clojure 1.6和leiningen 2.5.0.

compilation clojure leiningen

3
推荐指数
1
解决办法
118
查看次数

传递 Dataset.from_tensor_slices 列表与元组

我在处理一些张量流代码(v1.13.1)时注意到了这种微妙之处:

tf.enable_eager_execution()

for n in Dataset.from_tensor_slices(([1, 2], [3, 4])).make_one_shot_iterator():
    print(n)
#
# prints:
# (<tf.Tensor: id=8, shape=(), dtype=int32, numpy=1>, <tf.Tensor: id=9, shape=(), dtype=int32, numpy=3>)
# (<tf.Tensor: id=12, shape=(), dtype=int32, numpy=2>, <tf.Tensor: id=13, shape=(), dtype=int32, numpy=4>)
#

for n in Dataset.from_tensor_slices([[1, 2], [3, 4]]).make_one_shot_iterator():
    print(n)
#
# prints:
# tf.Tensor([1 2], shape=(2,), dtype=int32)
# tf.Tensor([3 4], shape=(2,), dtype=int32)
#
Run Code Online (Sandbox Code Playgroud)

上面的区别是第一个循环传递元组中的两个张量,第二个循环传递列表中的两个张量。我预计第二个循环的工作方式与第一个循环相同,对张量进行切片。这是 tf 处理传入元组和列表的方式故意不同吗?

python tensorflow

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

标签 统计

3d ×1

clojure ×1

compilation ×1

geometry ×1

leiningen ×1

math ×1

python ×1

tensorflow ×1

vector ×1