np.apply_along_axis()函数似乎非常慢(15分钟后没有输出).有没有一种快速的方法在长阵列上执行此功能而无需并行化操作?我特别谈论有数百万个元素的数组.
这是我想要做的一个例子.请忽略my_func的简单定义,目标不是将数组乘以55(当然这可以在适当的位置完成),而是一个例子.在实践中,my_func稍微复杂一些,需要额外的参数,因此a的每个元素都被不同地修改,即不仅仅乘以55.
>>> def my_func(a):
... return a[0]*55
>>> a = np.ones((200000000,1))
>>> np.apply_along_axis(my_func, 1, a)
Run Code Online (Sandbox Code Playgroud)
编辑:
a = np.ones((20,1))
def my_func(a, i,j):
... b = np.zeros((2,2))
... b[0,0] = a[i]
... b[1,0] = a[i]
... b[0,1] = a[i]
... b[1,1] = a[j]
... return linalg.eigh(b)
>>> my_func(a,1,1)
(array([ 0., 2.]), array([[-0.70710678, 0.70710678],
[ 0.70710678, 0.70710678]]))
Run Code Online (Sandbox Code Playgroud) 如果b是2x2 np.ndarray并且执行了以下赋值,numpy在后台执行什么操作,即它是否首先将列表[100,100]转换为numpy数组,还是直接使用列表[100,100]来执行填写b第一行的值:
b[1,:] = [100,100]
Run Code Online (Sandbox Code Playgroud)
我可以在文档中的哪个位置找到更多相关信息?
更具体地说,我有一个行/列列表,在选择最大条目时需要忽略.换句话说,当选择最大上三角形条目时,需要跳过某些索引.在这种情况下,找到最大上三角形入口位置的最有效方法是什么?
例如:
>>> a
array([[0, 1, 1, 1],
[1, 2, 3, 4],
[4, 5, 6, 6],
[4, 5, 6, 7]])
>>> indices_to_skip = [0,1,2]
Run Code Online (Sandbox Code Playgroud)
我需要找到除了条目在上部三角形的所有元素之间的最小元素的索引a[0,1],a[0,2]和a[1,2].
用零填充numpy数组的下三角形的最佳方法是什么,这样我就不必执行以下操作:
a=np.random.random((5,5))
a = np.triu(a)
Run Code Online (Sandbox Code Playgroud)
因为np.triu返回一个副本,而不是一个视图.因为我正在处理大型数组,所以最好不需要列表索引.
有没有一种简单的方法可以使用列表或任何其他集合来索引数组,这样就不会进行复制(只需要获取数组的视图).请不要尝试按照下面的代码片段来回答问题 - 我用来索引元素的列表并不总是很短(即数千个元素,而不是4个),列表是算法的产物,因此,数量不一定是有序的,等等.
例如,在下面的代码中,在两种情况下都会选择第1,2和3列,但仅在第一种情况下会返回数据视图:
>>> a[:,1:4]
>>> b = a[:,1:4]
>>> b.base is a
True
>>> c = a[:,[1,3,2]]
>>> c.base is a
False
Run Code Online (Sandbox Code Playgroud) 无上下文语言和常规语言的交集始终是无上下文的,但是在集合交集下不关闭无上下文语言.任何人都可以解释为什么如果所有常规语言都没有上下文,两个定理都是正确的(相反的情况并非总是如此)?
我正在尝试执行以下操作。数组的外积 [a,b; c,d] 及其本身可以描述为长度为 2 的 4x4 '字符串' 数组。因此,在 4x4 矩阵的左上角,值为 aa、ab、ac、ad。在 numpy/python 或 matlab 中生成这些字符串的最佳方法是什么?
这只是一种外部产品的示例。目标是处理 k 个连续的外积,即 4x4 矩阵可以再次乘以 [a,b; c,d]等等。