我有一个将值转换为列表(或数组)的函数。如何使用它将N-D数组转换为另一个(N+1)-D数组?下面的代码需要生成一个列表,然后转换为。我想知道是否有更有效的方法(也许是的构造函数?)。 # # assume we have a function foo
# def foo(val):
# return [val*10, val*20 - 7]
# # how can we use this function to convert a N-D array to another (N+1)-D array?
# # here is my tried
import numpy as n
这是我第一次尝试在numpy中使用大步,与不同过滤器上的简单迭代相比,它确实提高了速度,但是它仍然相当慢(感觉至少有一两件事情是完全多余的或效率低下的)。
因此,我的问题是:是否有更好的方法来执行此操作或对我的代码进行调整,使其显着地加快速度?
该算法对每个像素执行9个不同滤波器的局部评估,并选择具有最小标准差的滤波器(我试图实现Nagau和Matsuyma (1980)“复杂Areal照片的结构分析”,如一本图像分析书所述)。结果是一个平滑的和边缘锐化的图像(很酷,如果你问我!)
import numpy as np
from scipy import ndimage
from numpy.
考虑用于指定matplotlib绘图数据的典型numpy数组规范:
t = np.arange(0.0,1.5,0.25)
s = np.sin(2*np.pi*t)
基本上,这将(x,y)数据点的x坐标存储在数组t中;将结果y坐标( y=f(x)的结果,在本例中为sin(x))存储在数组s中。然后,可以非常方便地使用numpy.nditer函数在t和s中获得连续的条目对,表示数据点的(x,y)坐标,如下所示:
for x, y in np.nditer([t,s]):
print("xy: %f:%f" % (x,y))
因此,我尝试将以下代码片段作为test.py
i
我有一个用例,并将其简化为以下问题:
import numpy as np
def get_matrix(i): # get a matrix N * M
return (
(i, i + 1, i + 1.2),
(i + 1, i / 2, i * 3.2),
(i / 3, i * 2, i / 4),
(i / 5, i * 2.1, i + 2.2),
)
K = 10000
# build a n-d array K * N * M
arr = np.array(
tuple(get_mat
在这个问题的末尾看到了重要的澄清.
我正在使用numpy来加速一些经纬度坐标的处理。不幸的是,我的numpy“优化”使我的代码运行速度比不使用numpy的代码慢5倍。
瓶颈似乎在于用我的数据填充numpy数组,然后在完成数学转换之后提取出这些数据。为了填充数组,我基本上有一个循环,类似于:
point_list = GetMyPoints() # returns a long list of ( lon, lat ) coordinate pairs
n = len( point_list )
point_buffer = numpy.empty( ( n, 2 ), numpy.float3
我写了一个函数,当使用for循环时,这个函数太耗时了。它将numpy向量(10,0)作为行附加到每次迭代中。我如何使用向量化的numpy解决方案进行迭代来加快速度呢? 为什么下面的vstack-array解决方案比append-list解决方案还要慢? 提亚 import numpy as np
import time
n_iterations = 1000
n_cols = 10
def sample_func():
# Addition: please notice: the randon function is not important. It is only an e
我想用下面的数组为极坐标创建一个网格。
R = 1.15
r = numpy.linspace(R,5,100)
theta = numpy.linspace(0,2*numpy.pi,145)
我尝试了这种方式,使用numpy
X,Y=numpy.meshgrid(r*numpy.cos(theta),r*numpy.sin(theta))
但是我得到了这个错误:
ValueError: operands could not be broadcast together with shapes (100,) (145,)
如何生成网格并显示点?
我有一个大小为(5,7,3)的矩阵A和一个大小为(5,3,8)的矩阵B。我想把它们相乘,C的大小是(5,7,8)。
这意味着矩阵A中的一个大小为(7,3)的二维子矩阵将分别与矩阵B中的一个大小为(3,8)的二维子矩阵相乘。所以我必须乘以5倍。
最简单的方法是使用循环和numpy:
for u in range(5):
C[u] = numpy.dot(A[u],B[u])
有没有办法不使用循环就能做到这一点呢?Theano中有没有等效的方法可以在不使用scan的情况下做到这一点?
我正在尝试接收一张图像,逐个像素地检查其中是否有任何红色。
如果有,它将用白色替换它。一旦它遍历每个像素,它将返回一个白色而不是红色的新图像。
以下是我的尝试:
import cv2
import numpy as np
def take_out_red():
'''
Takes an image, and returns the same image with red replaced
by white
------------------------------------------------------------
Postconditions:
retur
例如,找到下面的图像,它解释了一个简单的2D情况下的问题。每个点的标签(N)和坐标(x,y)是已知的。我需要找到位于红色圆圈内的所有点标注
我的实际问题是在3D模式下,点分布不均匀
包含7.25M点坐标的样本输入文件附在这里。
我尝试了下面这段代码
import numpy as np
C = [50,50,50]
R = 20
centroid = np.loadtxt('centroid') #chk the file attached
def dist(x,y): return sum([(xi-yi)**2 for xi, yi in zip(x,y
我使用Python和numpy已经有几个星期了。直到今天我才意识到
a = np.array([1,2,3])
b = np.array([[1,2], [3,4], [5,6]])
这两次计算得到了相同的结果
a @ b
b.T @ a
即使第一个在代数中没有意义(关于维度)。
所以我的问题是,.dot的算法在第一次计算中是如何工作的?或者numpy是如何考虑一维和N-D数组的?
我试图找出像素的HSV值是否在正确的阈值内,但它引发了一个错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我想要做的是:
x, y = numpy.where(0.08196969696969696 >= img >= 0.1 and 0.7285714285714286 >= img >= 0.525 and 150 >= img >= 95)
如何在numpy数组中找到该阈值内的所有可能像
mat=[]
for x in np.linspace(x_min, x_max,num_x):
y=np.linspace(y_min, y_max,num_y)
mat.append(list(zip([x]*len(y),y)))
mat=np.array(mat)
我可以使用循环来完成上面的工作,但是我正在寻找一种更有效的方法。
我正在尝试将CSV数据集读取到一个二维numpy数组中,然后返回该数组。我仍然收到一个return none消息,并且不确定我解决这个问题的方法--我是numpy的新手。 明确地说,数据集包含两列和大约100行数据。我想创建一个数组,其中第一列数据是x坐标,第二列数据是y坐标。 import numpy as np
data = open("mydata.csv")
read = data.read()
def generatingArray(read):
for data in read:
dataPoints = np.array(read[
我在NumPy中计算矩阵的特征向量和特征值,只想通过assert语句检查结果。这将抛出一个我不太理解的ValueError,因为打印这些比较效果很好。有什么建议可以让这条assert语句工作吗?
import numpy as np
A = np.array([[3,5,0], [5,7,12], [0,12,5]])
eig_val, eig_vec = np.linalg.eig(A)
print('eigenvalue:', eig_val)
print('eigenvector:', eig_vec)
for col in range(A.shape[
我想找出2dnumpy数组中最大值的指标i,j:
a = numpy.array([[1,2,3],[4,3,1]])
我尝试使用numpy.argsort()来完成,但它返回一个数组,因为它只能沿着一个轴完成。一种解决方案是使用for循环比较argsort返回的所有索引(沿两个轴)的元素,但这看起来有点复杂。也许有一个简单的解决方案?
如果我在一维上定义了两个切片对象,那么是否有可能将它们组合起来以获得一个多维切片对象,该对象可用于对numpy数组进行切片?
mat = np.zeros((10,10), dtype=np.uint8)
s1 = slice(0,5)
s2 = slice(0,5)
mat[s1,s2] # I want to achieve this effect with one slice object
slice2d = slice(s1, s2) # does not throw an error
mat[slice2d] # but this does not work