arr = np.array([Myclass(np.random.random(100)) for _ in range(10000)])
在这条语句中,有没有办法通过直接创建一个对象的numpy数组来节省时间(避免代价高昂的列表构造)?
我需要创建和处理Myclass类的大量对象,其中每个对象包含几个int、几个float和一个浮点数列表(或数组)。使用(对象的)数组的要点是利用numpy数组在对象数组(和其他东西;在其上获取切片的数组由一个Myclass对象和其他标量字段组成)的切片上的快速计算(例如,列和)。除了使用np.array (如上所述)之外,在这种情况下还有没有其他节省时间的
我不确定我的标题是否正确,但基本上我有一个引用坐标,格式为(x,y,z),还有一个大的列表/坐标数组。我需要得到每一个之间的欧几里德距离,所以在理论上,对于numpy和scipy,我应该能够做一个操作,例如:
import numpy, scipy.spatial.distance
a = numpy.array([1,1,1])
b = numpy.random.rand(20,3)
distances = scipy.spatial.distance.euclidean(b, a)
但是我没有得到一个数组,而是得到了一个错误:ValueError: Input vector should
我想了解einsum函数是如何在python中实现的。我在numpy/core/src/multiarray/einsum.c.src文件中找到了源代码,但不能完全理解它。特别是,我想了解它是如何自动创建所需的循环的?
例如:
import numpy as np
a = np.random.rand(2,3,4,5)
b = np.random.rand(5,3,2,4)
ll = np.einsum('ijkl, ljik ->', a,b) # This should loop over all the
# four indicies i,j,k,l. How
我有两个输入numpy数组,它们分别具有一组点的纬度和经度坐标:lats和lons。
我继承了一个函数,它将每个(lat,lon)对转换为一个(E,N)对:
def convert(lat,lon): #takes two floats as arguments (unit: degrees)
...
computation #Actual function is too long to post
...
return N,E #returns two floats (unit: meters)
我的问题:如何有效地同时将相同的函数应用于两个输入numpy数组?
我正在
假设我将两个数组中的数字打印到一个文件中:
from numpy import random
number_of_points = 10000
a = random.rand(number_of_points)
b = random.rand(number_of_points)
fh = open('file.txt', 'w')
for i in range(number_of_points):
for j in range(number_of_points):
print('%f %f' % (a[i], b[j]),
有没有一种方法可以使用映射或列表理解或任何其他更快的方法来实现下面的代码块,使其在功能上保持相同?
def name_check(names, n_val):
lower_names = names.lower()
for item in set(n_val):
if item in lower_names:
return True
return False
感谢您在这里提供的帮助
当创建一个列表时,我认为尽可能地推荐理解,因为它是最快的。但是你看。
In [1]: %timeit -n1000 [0]*1000000
1000 loops, best of 3: 2.3 ms per loop
In [2]: %timeit -n1000 [0 for _ in range(1000000)]
1000 loops, best of 3: 27.1 ms per loop
In [3]: a = np.zeros(1000000, dtype=int)
In [4]: %timeit -n1000 a.tolist()
1000 loops, best of 3:
我有以下for-循环来构造一个值列表:
p = 7
A = []
for i in range(0, 10**p):
A.append(i**3 + i**2)
为了加快列表的创建速度,我使用向量化方法将其创建为Numpy数组。这种方法比等效的for -循环要快得多,特别是对于较大的p值,这会增加范围。
import numpy as np
from numba import autojit
p = 7
m = np.arange(0, 10**p)
D = np.empty(len(m))
D = m**3 + m**2
为了进一步加快数组的创建速度,我想我应该尝试使用Numba
有没有可能使用numba来加速np.take?
这是我的尝试,但速度要慢得多。我不能使用nopython模式,因为它不像np.empty_like命令。
import numba
import numpy as np
from timer import Timer
def take( x, indices ):
result = np.empty_like( indices, dtype=x.dtype )
for i in range( len( indices ) ):
result[i] = x[ indices[ i ] ]
r
我有一个名为“地中海站点”的列表,里面有4个列表,每个内部列表都有几百个条目。
我想得到每个内部列表的总和,所以我尝试了:
for (i in 1:length(thalachbysite)) {
sum(thalachbysite[[i]])
}
我的输出完全是空的-它接受输入没有错误或警告,但我的屏幕仍然是空白的。有人能解释原因吗?
我成功地在给定范围内创建了一个素数列表,使用如下:
import numpy as np
num = int(input("Enter a number: "))
for a in range(2,num+1):
maxInt=int(np.sqrt(a)) + 1
for i in range(2,maxInt):
if (a%i==0):
break
else:
print (a)
现在我想找出范围内所有素数的和,所以我把
print (sum(a))
但是,当我尝试这样做时,我得到了以下的
%%cython
import numpy as np
cimport numpy as np
def cy_sum(int n):
cdef double s=0
cdef int i
for i in range(n):
s += np.sqrt(i)
return s
如上所示,我有计算平方根和的代码。通过使用cython -a,我得到了图片中的结果。cython代码在函数调用np.sqrt(i)时与python交互,与纯python代码相比没有任何改进。
我不知道在指定变量类型时是否做错了什么。还有其他解决方案,例如使用i*
我正在尝试计算卡方函数,例如,将任意(黑盒)函数与数据的数值向量数组进行比较。目前我正在python中循环数组,但是像这样的东西非常慢:
n=len(array)
sigma=1.0
chisq=0.0
for i in range(n):
data = array[i]
model = f(i,a,b,c)
chisq += 0.5*((data-model)/sigma)**2.0
return chisq
array是一维numpy数组,a,b,c是标量。有没有办法通过使用numpy.sum()或某种lambda函数等来加速这一过程?我可以看到如何删除一个循环(通
我试图迭代python中两个numpy数组的行,使用以下for循环:
for i, j in range(X.shape[0]), range(y.shape[0]):
但我得到了以下错误:
ValueError: too many values to unpack (expected 2)
我认为,通过创建包含每个数组中行数的列表,我可以使用i的值在X上迭代,使用j的值遍历y。
有人能解释一下为什么这不管用吗?我怎么才能让它起作用呢?谢谢!
我在动态创建numpy 2D数组时遇到了困难。
所以基本上我有一个for循环,就像这样。
for ele in huge_list_of_lists:
instance = np.array(ele)
创建这个列表的一维numpy数组,现在我想将它附加到numpy数组中,所以基本上是将列表的列表转换为数组的数组?
我已经检查过手册了..以及不起作用的np.append()方法,因为要让np.append()起作用,它需要两个参数才能将它们附加在一起。
有什么线索吗?
我有大约95,000,000排列要检查。我有8个不同长度的列表,每个字符串标识在excel表中定义的属性(A)。e.g
bcdgj
具有b,c,d,g和j的性质
我只需要找到一个包含至少3个属性的置换,然后将这些属性与电子表格中的数据进行匹配。
我已经完成了这个脚本(我第一次尝试使用python)
import numpy
import itertools
for x in itertools.product(['abfhj','bcdgj','fghij','abcj','bdgk','abgi'