- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试根据一个数组中的值是否在另一个数组中来创建一个数组。我希望以下内容会起作用:
A = np.fromfunction(lambda x, y: tuple(order[x,:]) in paths[y,],\
shape=((len(order), len(paths))), dtype=int)
不幸的是,这只会产生一个标量值,而不是我想要的数组。我可以使用 for 循环实现相同的效果,如下所示,但由于涉及的值数量众多,此选项非常慢。
A = np.zeros(shape=(len(order), len(paths)), dtype=int)
for i in np.ndindex(len(order), len(paths)):
r = i[0] # Row
c = i[1] # Column
x = r + c + (len(paths)-1)*r
if paths[c,] == None:
pass
elif tuple(order[r,:]) in paths[c,]:
np.put(A, x, 1, 'wrap')
有没有人有生成目标矩阵的有效方法?非常感谢您的帮助!
\edit:非常感谢 hpaulj 的提示。我认为np.where
进入了我想要实现的方向,但是无法处理两个数组的复杂性。我编辑了上面的方法,因为 x = r*c if r*c != 0 else r+c
没有给我我想要的结果——当我的输出是乱码时,我以某种方式弄清楚了... 但是,x = r + c + (len(paths)-1)*r
确实可以唯一标识平展二维数组的每个位置。我在下面包含了一些示例,这些示例应该可以更清楚地说明我要实现的目标。抱歉造成混淆!
order
[[ 73 6 3 1]
[ 73 6 3 2]
[ 6 116 3 1]
[ 6 116 3 2]
[116 45 3 1]
...10k additional lines...]
paths
[ [(12, 14, 1615, 1), (14, 156, 1615, 1), (156, 83, 1615, 1), (83, 37, 1554, 1), (37, 36, 1554, 1)]
[(12, 14, 1615, 2), (14, 156, 1615, 2), (156, 83, 1615, 2), (83, 37, 1554, 2), (37, 36, 1554, 2)]
[(12, 14, 1615, 1), (14, 156, 1615, 1), (156, 83, 1615, 1), (83, 37, 1554, 1), (37, 36, 1554, 1)]
[(12, 14, 1615, 2), (14, 156, 1615, 2), (156, 83, 1615, 2), (83, 37, 1554, 2), (37, 36, 1554, 2)]
[(12, 14, 1615, 1), (14, 156, 1615, 1), (156, 83, 1615, 1), (83, 37, 1554, 1), (37, 36, 1554, 1)]
[(12, 14, 1615, 2), (14, 156, 1615, 2), (156, 83, 1615, 2), (83, 37, 1554, 2), (37, 36, 1554, 2)]
...600 additional lines...]
目标是检查 order
的每个值是否在 paths
内,并且是否为 True
或 1
在行/列交叉点。所有其他交叉点应为 False
/0
。保持行和列的顺序至关重要,因为矩阵随后会与有序向量相乘。实际上,我正在模拟这个(URL - 见下文,p94)算法。该矩阵应该反射(reflect)特定产品(路径
)对特定资源(order
)的利用。
最佳答案
查看代码形式fromfunction
。
args = indices(shape, dtype=dtype)
return function(*args,**kwargs)
np.indices
类似于 meshgrid
In [28]: np.indices((2,3))
Out[28]:
array([[[0, 0, 0],
[1, 1, 1]],
[[0, 1, 2],
[0, 1, 2]]])
所以 np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)
相当于做
In [29]: idn=np.indices((2,3))
In [31]: idn[0]+idn[1]
Out[31]:
array([[0, 1, 2],
[1, 2, 3]])
我通常会用广播来做:np.arange(2)[:,None] + np.arange(3)
有一个 np.frompyfunc
将把一个 Python 函数应用到它输入的每个元素。但它只适用于 1d(尽管对于结构化数组有一些巧妙的技巧)。 np.vectorize
也使用了它。但两者仍在迭代,因此最多节省 2 倍的时间。
===============
ndindex
是另一种生成索引值的方式
In [42]: list(np.ndindex(2,3))
Out[42]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
In [43]: list(zip(*np.ndindex(2,3)))
Out[43]: [(0, 0, 0, 1, 1, 1), (0, 1, 2, 0, 1, 2)]
通过 zip
转置,我得到的值与 nd.indices
生成的值相似(但很乱)。
======================
如果没有 order
和 paths
的样本值,很难想象您的函数在做什么。或者更确切地说,仅仅通过阅读代码我无法想象它在做什么,而且没有示例我无法运行测试。对于采用标量 i,j
坐标的“黑盒”函数,您的方法已经差不多了。为了使其更快,您必须重新编写函数,以便它直接使用 np.indices
的子数组,而不是迭代地使用。
===============
获取 x
值的矢量化方法可能是
In [105]: I,J=np.indices((3,3))
In [106]: np.where(I*J,I*J,I+J)
Out[106]:
array([[0, 1, 2],
[1, 1, 2],
[2, 2, 4]])
where
在整个数组上执行 x = r*c if r*c != 0 else r+c
。
与 bool 掩码(数组 if
测试的好工具)相同的是:
In [114]: x=I*J
In [115]: mask = x==0
In [116]: x[mask]=(I+J)[mask]
In [117]: x
Out[117]:
array([[0, 1, 2],
[1, 1, 2],
[2, 2, 4]])
关于python - np.fromfunction : Reference other arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510982/
有时评估积分非常困难,但很容易验证解是否正确。在我看来它至少应该是 np,但我对这个概念的理解是有限的,我可能会遗漏一些东西 编辑:为了清楚起见,我很好奇算法的复杂性,该算法找到函数的反导数以解决不定
我对这三个类别的理解是否正确? 要证明问题 X 是 NP: 表明 X 可以在多项式时间内确定性地得到验证(或者X 可以使用 NTM 解决) 要证明问题 X 是 NP 完全的: 表明 X 可以在多项式时
有什么区别NP , NP-完全和 NP-Hard ? 我知道网上有很多资源。我想阅读你的解释,原因是它们可能与外面的不同,或者有一些我不知道的东西。 最佳答案 我假设您正在寻找直观的定义,因为技术定义
我正在寻找一种方法来检查 numpy 数组是 np.float64 还是 np.float32。这适用于 np.float64: a = np.random.rand(10) if not issub
我知道 np.nanargmin 找到列表中不是 NaN 的最小数字。但是,如果调用数组 [np.nan, np.inf],它会产生 0,这是一个 NaN。我发现这种行为很奇怪,我只是想知道以这种方式
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
我很好奇使用 np.empty 到底有多大不同?而不是 np.zeros ,以及关于 np.ones 的区别.我运行这个小脚本来对每个创建大型数组所花费的时间进行基准测试: import numpy
在操作矩阵的时候,不同的接口对于矩阵的输入维度要求不同,输入可能为1-D,2-D,3-D等等。下面介绍一下使用Numpy进行矩阵维度变更的相关方法。主要包括以下几种: 1、np.newaxis扩充
除了使用一组 or 语句之外 isinstance( x, np.float64 ) 或 isinstance( x, np.float32 ) 或 isinstance( np.float16 )
我尝试了以下代码,但没有发现 np.dot 和 np.multiply 与 np.sum 之间的区别 这里是 np.dot 代码 logprobs = np.dot(Y, (np.log(A2)).T
我编写了一些程序来更新 numpy在每次迭代中列出并对其进行一些操作。迭代次数取决于时间。例如在 1 秒内,可能有 1000 到 2500 次迭代。这意味着 numpy 列表中的项目对于运行程序 1
我有以下两个数据框: a = pd.DataFrame([[1,2, 3],[4,3,6], [np.nan, 2, np.nan]]) 0 1 2 0 1.0 2 3.0 1
我有一个包含很多非零值的数组。当我使用以下方法计算非零项目总数时,我得到了 2 个不同的结果: 1) non_zero_weights = np.any(np.not_equal(lr_l1.coef
我对这么多int有点挣扎cython 中的数据类型。 np.int, np.int_, np.int_t, int 我猜 int在纯python中相当于np.int_ , 那么 np.int 在哪里来
如果您要选择以下三种初始化零数组的方法之一,您会选择哪一种以及为什么? my_arr_1 = np.full(size, 0) 或 my_arr_2 = np.zeros(size) 或 my_arr
我正在使用 np.select 根据应用于其他列的多个条件创建一个新列。这是一个简单的例子: df = pd.DataFrame({'A': [0, 3, 4], 'B': [10, 0, 2]})
我正在使用 np.select 根据应用于其他列的多个条件创建一个新列。这是一个简单的例子: df = pd.DataFrame({'A': [0, 3, 4], 'B': [10, 0, 2]})
我正在读这个code ,用于从头开始实现线性回归: # convert from data frames to numpy matrices X = np.matrix(X.values) y = n
我正在解压缩具有许多不同数据类型的大型二进制文件 (~1GB)。我正处于创建循环以隐藏每个字节的早期阶段。我一直在使用 struct.unpack,但最近认为如果我使用 numpy 它会运行得更快。然
我需要从依存分析树中提取形式为 NP-VP-NP 的三元组,作为 Stanford Parser 中词汇化分析的输出。 执行此操作的最佳方法是什么。例如如果解析树如下: (ROOT (S
我是一名优秀的程序员,十分优秀!