矩阵在java里怎么计算方法,计算“距离矩阵”

我将尝试用一个简单的例子来解释我所追求的 .

aGrid = np.arange(1,9)

bGrid = np.arange(101, 109, 0.5)

A, B = np.meshgrid(aGrid, bGrid, indexing='ij')

np.random.seed(66)

valid = np.random.choice([True, False], A.shape)

将 valid 视为一个矩阵,确定你是否“被允许留在网格点 (a, b) . 如果你不被允许留在那里,你必须通过减少 b :你需要向左移动(沿着行) .

我现在正在尝试创建这个 transition 矩阵:对于此 valid 矩阵中的每个项目,它确定在您到达下一个 True 项目之前需要执行的"travel distance" . 行程距离来自元素之间的单位 . 在这个例子中,我沿着 b 维度将行程距离设置为 0.5 . 如果您已经在 True 位置,那么您的距离是 0 .

对于给定的种子,这是 valid :

array([[False, True, True, True, True, True, False, True, True,

True, True, False, False, True, False, True],

[ True, True, True, True, True, False, True, False, True,

True, True, True, True, False, True, False],

[ True, True, False, True, False, False, False, True, True,

True, True, True, False, False, True, False],

[ True, True, False, False, True, False, False, False, False,

False, False, True, False, False, True, False],

[ True, True, True, True, True, True, True, False, True,

True, False, False, False, False, False, True],

[False, True, True, False, False, True, True, False, True,

True, False, True, False, False, False, False],

[ True, True, True, False, True, False, True, True, True,

False, False, True, False, True, False, True],

[False, True, False, False, True, False, True, True, False,

True, False, False, False, True, False, False]], dtype=bool)

一些预期的产出

对于第一个元素,我们不能向左移动更多以找到 True 值 - 默认值应为 np.NaN . 对于第一行的下5个元素,距离为 0 :它们已经位于有效位置 . transition[0, 6] = 0.5 :需要向左移动一个元素 .

所以,前两行是

array([[NaN, 0, 0, 0, 0, 0, 0.5, 0, 0,

0, 0, 0.5, 1, 0, 0.5, 0],

[ 0, 0, 0, 0, 0, 0.5, 0, 0, 0,

0, 0, 0, 0, 0.5, 0, 0.5],

我试图使用 np.argmax 和 np.argmax 的组合找到“ True 的最大元素,但小于 x ,对于每个 x ,同时迭代 valid 中的每个元素 x . This seems to be super inefficient. 什么是更好的方法来接近它?

也许有一种方法来矢量化这个?此外,我不能依赖于此示例中给出的 0.5 的等距离 . 该方法需要使用 bGrid (或 B )计算当前单元格与下一个有效单元之间的距离 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值