我有两个长度不同的天文表:
print(type(a), len(a))
print(type(b), len(b))
<class 'astropy.table.table.Table'> 457
<class 'astropy.table.table.Table'> 355
我正在寻找两个表之间的差异,(显然)这些表仅对较小数量的数组有效:
delta = b - a
print(type(delta), len(delta))
然后我要在达到最小值的位置查找'a'和'b'的值:
a[np.where(delta = delta.min())]
b[np.where(delta = delta.min())]
似乎后者可以正常工作,但是对于前者,我得到了:
IndexError: boolean index did not match indexed array along dimension 0; dimension is 457 but corresponding boolean dimension is 355
想法?
答案 0 :(得分:3)
我们可以使用以下方法创建增量列表:
n = min(len(a), len(b))
delta = b[:n] - a[:n]
然后我们可以使用以下方法计算delta
最小的索引:
idx = np.argmin(delta)
然后我们可以通过以下方式获得相应的值:
am, bm = a[idx], b[idx]
请注意,如果在某些地方a
大于b
,则变化量将为负,这可以算作最小值。如果要获得差异的“绝对值”,则应添加np.abs(..)
:
delta = np.abs(b[:n] - a[:n])
答案 1 :(得分:0)
确定通过where
代码收到此错误吗?该错误是由布尔值生成的,即不带“ where”的'=='测试。
In [375]: a = np.random.rand(100)
In [376]: b = np.random.rand(50)
In [377]: delta = a[:50]-b
In [380]: dm = delta.min()
In [381]: dm
Out[381]: -0.8017596490704487
使用a
对较长的delta
进行布尔掩码会产生此错误:
In [384]: a[delta == dm]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-384-d8a934874c2c> in <module>()
----> 1 a[delta == dm]
IndexError: boolean index did not match indexed array along dimension 0; dimension is 100 but corresponding boolean dimension is 50
In [386]: b[delta == dm]
Out[386]: array([0.91912184])
我们可以使用dm
或where
找到argmin
的索引。 where
不会导致该错误:
In [390]: np.argmin(delta)
Out[390]: 48
In [391]: np.where(delta == dm)
Out[391]: (array([48]),)
In [392]: a[np.where(delta == dm)]
Out[392]: array([0.11736219])