【发布时间】:2015-12-15 17:53:30
【问题描述】:
我正在尝试编写一些代码,使用逻辑 numpy 数组来索引更大的数组,类似于 MATLAB 允许使用逻辑数组进行数组索引的方式。
import numpy as np
m = 4
n = 4
unCov = np.random.randint(10, size = (m,n) )
rowCov = np.zeros( m, dtype = bool )
colCov = np.ones( n, dtype = bool )
>>> unCov[rowCov, rowCov]
[] # as expected
>>> unCov[colCov, colCov]
[0 8 3 3] # diagonal values of unCov, as expected
>>> unCov[rowCov, colCov]
ValueError: shape mismatch: objects cannot be broadcast to a single shape
对于最后一次评估,我期望一个空数组,类似于 MATLAB 返回的内容。我宁愿不必在索引之前检查 rowCov/colCov 的 True 元素。为什么会发生这种情况,有没有更好的方法来做到这一点?
【问题讨论】:
-
Umm...matlab 在后一种情况下返回完整矩阵,而不是对角线值。对不对?
-
@Andras 哦,好点,你是对的!抱歉,我没有关注 MATLAB 比较的这方面。我猜 numpy 和 MATLAB 在这方面比我意识到的要大得多。
-
看看这个similar question我想它回答了你的问题。
-
@Bi Rico:是的,谢谢!这正是我想要的效果!
标签: python arrays matlab python-3.x numpy