我发现Python/NumPy中的以下行为有些奇怪:
In [51]: a = np.arange(10, 20)
In [52]: a = a / 10.0
In [53]: a
Out[53]: array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])
In [54]: a = np.arange(10, 20)
In [55]: a /= 10.0
In [56]: a
Out[56]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
我觉得a=a/10.0和a/=10.0应该返回
下面的numpy行为是故意的,还是一个bug?
from numpy import *
a = arange(5)
a = a+2.3
print 'a = ', a
# Output: a = 2.3, 3.3, 4.3, 5.3, 6.3
a = arange(5)
a += 2.3
print 'a = ', a
# Output: a = 2, 3, 4, 5, 6
Python版本: 2.7.2,Numpy版本: 1.6.1
我正在尝试使用numpy从文件中加载一个矩阵。当我使用除dtype以外的任何float时,都会得到以下错误:
OverflowError: Python int too large to convert to C long
代码:X = np.loadtxt(feats_file_path, delimiter=' ', dtype=np.int64 )
问题是,我的矩阵只有整数,我不能使用float,因为矩阵中的第一列是引用节点ids的整数“键”。当我使用float时,numpy将整数id“圈”成32423e^10,我不希望出现这种行为。
所以我的问题是:
如何解决Ove
我想从python代码中向Cython方法传递以下整数列表数组(即,它不是二维数组)。
Python示例代码
import numpy as np
import result
a = np.array([[1], [2,3]])
process_result(a)
a的输出为array([list([1]), list([2, 3])], dtype=object)
Cython示例代码
def process_result(int[:,:] a):
pass
上面的代码给出了以下错误:
ValueError: Buffer has wrong number of dimensions
我正在尝试子类化一个numpy结构数组,这样我就可以在子类中添加特殊的方法。一切都很好,直到我从数组中检索到一个索引。当发生这种情况时,将返回numpy.void类型的对象,而不是子类的类型。(实际上,无论是否进行子类化,从结构化数组中检索单个索引都会返回numpy.void类型的对象。)为什么会这样呢?我如何确保返回我的类的一个实例?我认为重写__getitem__是可行的方法,但我对ndarray子类化还不够熟悉,不能确信我不会搞砸其他事情。请给我建议。
下面是我所描述的行为的一个示例:
import numpy as np
# The ndarray subclass
class Fo
考虑下面的numpy数组和:
import numpy as np
a = np.array([10, 10])
b = np.array([1.3, 1.3])
a = a+b
print a
这将打印以下内容:
array([ 11.3, 11.3])
现在,如果我使用+=
import numpy as np
a = np.array([10, 10])
b = np.array([1.3, 1.3])
a +=b
print a
结果是:
array([11, 11])
对这种行为的解释是什么?我使用的是python 2.7.7和numpy 1.8.2
给定int32的NumPy数组,如何将其转换为float32 in place?所以基本上,我想做的是
a = a.astype(numpy.float32)
而不复制数组。它很大。
这样做的原因是我有两种算法来计算a。其中一个返回int32数组,另一个返回float32数组(这是两种不同算法所固有的)。所有进一步的计算都假设a是一个float32数组。
目前,我在一个名为ctypes的C函数中进行转换。有没有办法在Python中做到这一点?
我知道使用Python的random.choices我可以这样做:
import random
array_probabilities = [0.5 for _ in range(4)]
print(array_probabilities) # [0.5, 0.5, 0.5, 0.5]
a = [random.choices([0, 1], weights=[1 - probability, probability])[0] for probability in array_probabilities]
print(a) # [1, 1, 1, 0]
如何基于概率数组生成0和1的nu
索引一个numpy数组和另一个-两者都定义为dtype='uint32‘。使用numpy.take索引并得到一个不安全的强制转换错误。以前没遇到过这种情况。知道这是怎么回事吗?
Python 2.7.8 |Anaconda 2.1.0 (32-bit)| (default, Jul 2 2014, 15:13:35) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>
我正在尝试理解multiprocessing.shared_memory.SharedMemory是如何工作的。我尝试运行来自https://docs.python.org/3/library/multiprocessing.shared_memory.html的第二个示例-但它似乎不像广告中所说的那样工作: Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
>>> # In the first Python interactive s
我正在尝试从包含字典列表的python代码中加载一个数据库。对于列表中的每一项,字典包含一个文件的名称,一个子列表,它包含n个不同的字典,其中一个文件名和数据是一个大小为40x40x3的numpy矩阵,并对应于一个图像。我希望在一个for循环中将所有这些图像存储在一个大小为Nx40x40x3的numpy文件中。
for item in dataset:
print item["name"] # the name of the list
print item["data"] # a list of dictionaries
for row
您可以看到,使用Core Python方法和Numpy方法创建了两个相等的数组:
from time import time
import numpy as np
a = [3] * 100000
b = np.array(a)
问题是,在填充过程中,Numpy如何可能比Core Python方法更快:
填充:
st = time()
for i in range(len(a)):
a[i] = 0
et = time()
print "Core Python need %f seconds" % (et-st)
st = time()
b.fill(0)
et =
我知道如何强制python操作在float32上工作:
但是没有关于强制内置函数在float32上工作的问题或答案。我想问一下如何强制内置的数学或numpy函数(如math.sqrt或numpy.sqrt )在float32上工作。仅供参考,我还不能对这个问题发表评论。
在theano中,我们可以很容易地配置函数,例如,sqrt在float32或float64上工作,如下所示:
from theano import config
config.floatX = 'float32'
from theano import tensor as T
x = T.scalar()
a =