我正在尝试得到一个数组,它是通过将不同的函数都存储在一个numpy数组中得到的,有没有一种使用numpy进行编码的有效方法?
#func_array- a numpy array of different functions that get the same parameter
#X - parameter for evey function in func_array
def aplly_all(func_array, X):
return func_array(X)
#where return value is an array where
我想在numpy数组的行上运行一个操作(例如减去中间值)。
其中一种方法是使用理解列表:
import numpy as np
from statistics import median
x = np.array([[1, 2, 3, 4], [5, 6, 7 ,8], [9, 10, 11, 12]])
xm = np.vstack(([x[i,:] - median(x[i,:]) for i in range(x.shape[0])]))
处理每一行,然后将其垂直叠加为numpy数组。
是否有更有效/更优雅的方法来做到这一点?
我试图将一个小的2D numpy数组("pos_x“)的值添加到一个更大的2D numpy数组("frame")中,从框架数组中的一个特定位置开始( "pos_y")。现在,我有两个for-循环将源值添加到每个位置的帧值:
for i in range(x):
for j in range(y):
frame[pos_x+i][pos_y+j] += source[i][j]
("x“和"y”是源数组的形状)
但是,数组相当大(帧数组形状: 5000x8000,源数组形状: 1000x5000)。因此,这个过程需要
我有一个点云,看起来像这样:
红点是点,黑点是投影到xy平面的红点。虽然在图中它是不可见的,但是每个点也有一个值,当点被移动到xy平面时,这个值被添加到给定的像素中。点由numpy (np)数组表示,如下所示:
points=np.array([[x0,y0,z0,v0],[x1,y1,z1,v1],...[xn,yn,zn,vn]])
将这些点放入某些图像的明显方法是通过一个简单的循环,如下所示:
image=np.zeros(img_size)
for point in points:
#each point = [x,y,z,v]
image[tuple(po
这里是一个简单的Simpson集成代码练习,我已经准备好接受几个函数,以便在一组范围内集成 import numpy as np
def simps(f, a, b, N):
#N should be even
dx = (b - a) / N
x = np.linspace(a, b, N + 1)
y = f(x)
w = np.ones_like(y)
w[2:-1:2] = 2.
w[1::2] = 4.
S = dx / 3 * np.einsum("i...,i...",w,y)
retu
下面的代码可以工作,但是我想通过矢量化来创建Z。如何做到这一点?
import numpy as np
from numpy import sqrt
from math import fsum
points = np.array([[0,0],\
[5,-1],\
[4,6],\
[1,3]])
d = lambda x: fsum([sqrt((x[0]-z[0])**2 + (x[1]-z[1])**2) for z in points])
x = np.linspac
我目前正试图优化一段代码,其要点是,我们遍历并计算一组值,并将它们写入矩阵。计算的顺序并不重要:
mat = np.zeros((n, n))
mat.fill(MAX_VAL)
for i in xrange(0, smallerDim):
for j in xrange(0,n):
similarityVal = doACalculation(i,j, data, cache)
mat[i][j] = abs(1.0 / (similarityVal + 1.0))
我分析了这段代码,发现大约90%的时间花在将值写回矩阵(最后一行)上。
我想知道做
老派的c程序员试图跟上时代,学习Python。很难看到如何有效地使用矢量化来代替循环。我得到了一个基本概念,Python可以在单个语句中对整个matricies执行数学函数,这真的很酷。但我很少处理数学关系。几乎所有的for循环都应用条件逻辑。
这里有一个非常简单的例子来说明这个概念:
import numpy as np
# Initial values
default = [1,2,3,4,5,6,7,8]
# Override values should only replace initial values when not nan
override = [np.nan,np.nan
我过去主要使用Fortran,但最近我开始使用python和Numpy作为深度学习应用程序。
但是,在python中计算双for循环比在Fortran中要慢得多。我已经知道Fortran最初的计算速度很快,但我想知道我的python代码是否有什么问题。下面是我使用的代码:
for it in range(nt):
if it%20 == 1:
print(it,'//',nt)
itimenum4 = "%.4i" %(it)
ppsix2[:,:]=0.; ppsiz2[:,:]=0.
apsix2[
最近,我发现自己越来越多地在大量结构化数据(如点和多边形)上使用NumPy数组来进行内存管理和计算速度。在这样做的过程中,我总是需要对整个数组执行一些函数f(x)。根据经验和谷歌搜索,迭代数组并不是这样做的,因此,内置的函数应该被矢量化并广播到整个数组。
查看的文档,我们得到了下面的示例:
def myfunc(a, b):
"Return a-b if a>b, otherwise return a+b"
if a > b:
return a - b
else:
return a + b
>>&
我有一个numpy数组a,a.shape=(17,90,144)。我想找出每一列cumsum(a, axis=0)的最大值,但保留原来的符号。换句话说,如果对于给定的列a[:,j,i],cumsum的最大值对应于负值,我希望保留减号。
代码np.amax(np.abs(a.cumsum(axis=0)))得到了大小,但没有保留符号。使用np.argmax将获得我需要的索引,然后我可以将其插入到原始的cumsum数组中。但是我找不到一个好的方法来做到这一点。
下面的代码可以工作,但是很脏,而且非常慢:
max_mag_signed = np.zeros((90,144))
indices = n
我有下面的代码。原则上,它需要2^6 * 1000 = 64000次迭代,这是一个很小的数目。不过,我的电脑上需要9s,我想至少运行15次。
from __future__ import division
import numpy as np
import itertools
n=6
iters = 1000
firstzero = 0
bothzero = 0
for S in itertools.product([-1,1], repeat = n+1):
for i in xrange(iters):
F = np.random.choice(np.array(
我现在正在尝试创建一个圆锥形的渐变,这是可行的。然而,它看起来不太正确,我不能解释为什么: ? 从中心向上的那条线稍微向右倾斜,在底部有一条可见的(不太明显的)线。 代码如下: import math
import numpy
from PIL import Image
def newImg(w,h):
data = numpy.zeros((h, w, 3), dtype=numpy.uint8)
for y in range(h):
for x in range(w):
p = [y,x]
cen
我正在尝试让这段代码在python中运行得更快,但是我很难让它的运行速度接近它在MATLAB中的运行速度。问题似乎是这个for循环,当数字"SRpixels“大约等于25000时,它需要大约2秒才能运行。
我似乎找不到任何方法来进一步削减这一点,我正在寻求建议。
下面的numpy数组的数据类型除了**_Location[]是uint32以外的所有数组都是float32。
for j in range (0,SRpixels):
#Skip data if outside valid range
if (abs(SR_pointCloud[j,0]) > SR_xM
numpy.random.choice允许从向量中进行加权选择,即
arr = numpy.array([1, 2, 3])
weights = numpy.array([0.2, 0.5, 0.3])
choice = numpy.random.choice(arr, p=weights)
选择1的概率为0.2,2的概率为0.5,3的概率0.3。
如果我们想以矢量化的方式对每个行都是概率向量的2D数组(矩阵)这样做呢?也就是说,我们需要一个随机矩阵的选择向量?这是超慢的方式:
import numpy as np
m = 10
n = 100 # Or some very large n
我一直试图加快代码的速度,在下面查找一个索引,该索引将从列表"name“中获取一个字符串,并最终在两部分数据中计算出它所具有的确切匹配数。
这一过程非常缓慢。我读过关于在使用numpy数组时替换for循环的文章,但不知道如何处理/处理如何使用regex匹配创建向量化版本。
x = np.empty([38000, 8000])
y = np.empty([38000, 8000])
for i in range(0, 38000):
for j in range(0, 8000):
x[i, j] = len(re.findall('\\b
我一直在研究如何对外部和内部for循环进行矢量化。它们有一些计算和删除--这似乎使它变得不那么直接。
如何才能最好地将其矢量化?
import numpy as np
flattenedArray = np.ndarray.tolist(someNumpyArray)
#flattenedArray is a python list of lists.
c = flattenedArray[:]
for a in range (len(flattenedArray)):
for b in range(a+1, len(flattenedArray)):
if a =
我读过,它展示了一个算法是如何使用numpy加速250倍的。我试图通过使用numpy来改进下面的代码,但是我无法使它工作:
for i in nodes[1:]:
for lb in range(2, diameter+1):
not_valid_colors = set()
valid_colors = set()
for j in nodes:
if j == i:
break
if di
我试图通过求解两个涉及乔列斯基分解的线性方程组来寻找alpha。scipy有一个特殊的函数可以做到这一点。scipy和numpy之间存在着显著的性能差距。我可以通过其他方式在numpy中获得和scipy一样好的性能吗?(假设不允许我使用scipy)。
import numpy as np
import scipy
def numpy_cho_solve(N,M):
for seed in range(N):
np.random.seed(seed)
x = np.random.rand(M,1)
y = np.random.rand(M
我正在试用Numba来加速计算最小条件联合发生概率的函数。
import numpy as np
from numba import double
from numba.decorators import jit, autojit
X = np.random.random((100,2))
def cooccurance_probability(X):
P = X.shape[1]
CS = np.sum(X, axis=0) #Column Sums
D
我正在尝试过滤一个三元组的数组。我要筛选的标准是,另一个三元组是否至少包含一个具有相同的第一个和第三个元素的元素。E.g
import jax.numpy as jnp
array1 = jnp.array(
[
[0,1,2],
[1,0,2],
[0,3,3],
[3,0,1],
[0,1,1],
[1,0,3],
]
)
array2 = jnp.array([[0,1,3],[0,3,2]])
# the mask to filter the first array1 should look like this:
jnp.arra
我想使用一个lambda,如果x等于0,它会给x加1。我尝试过以下表达式:
t = map(lambda x: x+1 if x==0 else x, numpy.array())
t = map(lambda x: x==0 and x+1 or x, numpy.array())
t = numpy.apply_along_axis(lambda x: x+1 if x==0 else x, 0, numpy.array())
这些表达式中的每个表达式都返回以下错误:
ValueError: The truth value of an array with more than one el