问题
我有一个形状的numpy.array (H, W),存储图像的像素强度。我想要生成一个新的形状(H, W, H, W)数组,它存储图像中每一对像素之间的欧几里德距离(像素之间的“空间”距离;而不是它们强度的差异)。
解决尝试
下面的方法完全符合我的要求,但速度非常慢。我在找一个快速的方法来做这件事。
d = numpy.zeros((H, W, H, W)) # array to store distances.
for x1 in range(H):
for y1 in range(W):
for x2 in range(H):
for
在python的numpy中,为什么ogrid总是生成int64结果?
对于我的应用程序,我不想使用int64,因为内存限制(这在稍后一起广播输出组件时起作用)。有没有比后期重铸更好的选择:
y, x = np.ogrid[:9000,:9000]
y = y.astype(np.int16)
x = x.astype(np.int16)
对于大多数其他numpy调用,更简洁的解决方案是使用dtype=...可选参数,但ogrid不是作为函数调用的。相反,它似乎可以与a+b这样的运营商相媲美,除了它们通常有像np.add(a,b,dtype=np.int8)这样的替代品。
我试图根据它们的列和行位置来更改numpy数组值,目前正以这样的方式实现它:
for r in range(ResultArr2.shape[0]):
for c in range(ResultArr2.shape[1]):
ResultArr2[r,c] = ResultArr2[r,c]-r*1000-c*500
是否有一种非循环的方法来实现同样的结果?我知道,如果实现非循环结构,Python通常工作得更快,但我无法找到如何做到这一点。
我有过
形状的numpy.array a (n1,n2,n3,n4)
一个索引数组idx of array (n1,n2,i1)
我想做的是下面的代码
for i in range(n1):
for j in range(n2):
for k in range(i1):
b[i, j, k, :] = a[i, j, idx[i, j, k], :]
如果没有for循环就可以实现numpy函数?
我有以下计算网格和向量乘法的代码:
import numpy as np
Grid = np.ogrid[0:512, 0:512, 0:256]
Vec = np.array([1, 2, 3])
res = Vec @ Grid
警告是:
<stdin>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or sh
我正在尝试用另一个数组indices来索引一个多维数组P。它指定我想要的最后一个轴上的哪个元素,如下所示:
import numpy as np
M, N = 20, 10
P = np.random.rand(M,N,2,9)
# index into the last dimension of P
indices = np.random.randint(0,9,size=(M,N))
# I'm after an array of shape (20,10,2)
# but this has shape (20, 10, 2, 20, 10)
P[...,indices].
在下面的代码中,2 for循环平均需要大约.05s来完成。data是一个numpy数组。每个i,j单元格包含一个元组,该元组保存由这些函数定义的RGB值。稍后,我将使用这些RGB值和i, j是x, y像素坐标来构建图像。
有没有办法缩短这次手术的时间?或者,通过将每个像素的RGB值指定为某种数学函数,还有其他更快的方法来构建图像吗?
start = time.time()
for i in range (0, 150):
for j in range(0, 150):
data[i,j] = [int(math.sin(math.pi*i/300.0)*127.5 +
假设有一个4维数组idx1,存储另一个5维数组zeros1的5维索引。像这样: N,T,H,W = idx1.shape
zeros1 = np.zeros( (N,T,H,W, 256) )
# it is guaranteed that idx1's value <256 我想要认识到 for n in range(N):
for t in range(T):
for h in range(H):
for w in range(W):
x = idx1[ n,t,h,w ]
我有形状(?,d),(?,n)和(?,d)的np.arrays C,R和S;其中d<=n和问号表示任意数量的匹配维度。现在我想做下面的任务(这当然不是正确的python代码,但是如果?仅仅是一个数字):
for i in range(?):
R[i][S[i]]=C[i]
也就是说:我想为索引的每个元组i(在?指定的范围内)取R中的相应数组Ri,并将d个位置(由Si指定的位置)指定为数组Ci中的值。
做这件事的pythonic方法是什么?
示例:
设置
import numpy as np
m,n,d= 2,7,4
R=np.zeros((m,n))
C=np.arange(d*
我想知道如何使用numpy mgrid创建一个具有未知维数(D)的网格(多维数组),每个维度都有一个上下界和若干个bin:
n_bins = numpy.array([100 for d in numpy.arrange(D)])
bounds = numpy.array([(0.,1) for d in numpy.arrange(D)])
grid = numpy.mgrid[numpy.linspace[(numpy.linspace(bounds(d)[0], bounds(d)[1], n_bins[d] for d in numpy.arrange(D)]
我猜上面是行不通的,
当尝试使用numpy.array (结构化的numpy数组)时,我知道我可以通过执行类似于数组“col”的操作来拉出列。据我理解,这是因为numpy.dtype.names和结构化数组的本质。但是,当将所述数组传递到函数中时,我在使用numpy.dtype.name时不会得到列名,而是得到类似于"strxxx“的内容。如果它有助于了解,那么这个特定的数组是使用numpy.genfromtxt()和一个csv文件创建的。例如,下面的代码
def empty_check(param):
for ind in param:
# Ignore future warning for co
我需要对以下for循环进行矢量化,并且我对广播和矢量化是个新手(通常面向对象的编程对我来说也是新的)。 width = 1000
height = 400
for v in range(height):
for u in range(width):
start[v,u,0] = -0.5 + u / (width-1)
start[v,u,1] = (-0.5 + v / (height-1)) * height / width
start[v,u,2] = 0 我试过这个: start[:,:,0] = [-0.5+u/(width-1) for u in
在下面的例子中,我有一个2D数组,它有一些经过移位和填充的实际结果。移位取决于行(根据numpy的要求,填充用于使数组成为矩形)。有没有可能在不使用Python循环的情况下提取实际结果?
import numpy as np
# results are 'shifted' where the shift depends on the row
shifts = np.array([0, 8, 4, 2], dtype=int)
max_shift = shifts.max()
n = len(shifts)
t = 10 # length of the real result
我几天前才开始学习numpy和Python,所以如果我犯了任何明显的错误,我道歉。
基本上,我希望将以下for循环转换为更快的解决方案。我知道用numpy可以做到这一点,但我不确定怎么做。
img = np.zeros((height,width,3), np.uint8) #image matrix
indexes = np.zeros((height,width), np.uint8)
for y in range(height):
for x in range(width):
img[y][x] = vid[indexes[y][x]][y][x] #for 1
我有一个维度为t,z,x,y的numpy数组"data“,维度表示时间(t)和三个空间维度(x,y,z)。我有一个单独的索引数组" idx“,维度为t,x,y,描述数据中的垂直坐标:idx中的每个值描述数据中的一个垂直级别。
我想从idx索引的数据中提取值。我已经使用循环成功地做到了这一点(如下所示)。我已经读了几篇和,但我还没能让它变得更加pythonic/向量化。
有没有什么简单的方法可以让我做得不太对?或者也许循环是一种更清晰的方式...
import numpy as np
dim = (4, 4, 4, 4) # dimensions time, Z, X, Y
我正在尝试创建一个3D数组,它的单元格条目将根据单元格索引进行计算。具体来说,我想要那个细胞(i,j,k) = sqrt(i+j+k)。
对于循环来说,这很容易做到:
N=10
A=np.zeros((N,N,N))
for i in range(N):
for j in range(N):
for k in range(N):
A[i][j][k] = np.sqrt(i+j+k)
我想知道numpy是否内置了函数,使这些嵌套的for循环变得多余。