Tag: numpy

numpy.array .__ iadd__和重复的索引

我有一个数组: A = np.array([0, 0, 0]) 和重复索引列表: idx = [0, 0, 1, 1, 2, 2] 另一个数组我想用上面的索引添加到A: B = np.array([1, 1, 1, 1, 1, 1]) 操作: A[idx] += B 给出结果: array([1, 1, 1]) 1,1,1 array([1, 1, 1]) ,所以显然B中的值没有被总结。 获得结果array([2, 2, 2])的最佳方式是什么array([2, 2, 2]) ? 我必须迭代索引吗?

子集二维numpy数组

我已经看过文档和其他问题在这里,但似乎我还没有掌握在numpy数组中的子集。 我有一个numpy数组,为了争论,让它被定义如下: import numpy as np a = np.arange(100) a.shape = (10,10) # array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], # [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], # [30, 31, 32, 33, 34, 35, 36, 37, […]

用(n-1)d数组索引n维数组

什么是最优雅的方式来访问一个n维数组与一个给定维度(n-1)维数组,如虚拟示例 a = np.random.random_sample((3,4,4)) b = np.random.random_sample((3,4,4)) idx = np.argmax(a, axis=0) 我现在如何访问idx a来获取最大值,就好像我已经使用了a.max(axis=0) ? 或者如何检索由idx中的idx指定的值? 我想过使用np.meshgrid但我认为这是一个矫枉过正的问题。 请注意,维度axis可以是任何有用的轴(0,1,2),并且事先不知道。 有没有一个优雅的方式来做到这一点?

在NumPy分配中处理重复的索引

我正在设置二维数组中的多个元素的值,但是我的数据有时包含给定索引的多个值。 看来,“后来”的价值总是分配(见下面的例子),但是这种行为是保证还是有机会我会得到不一致的结果? 我怎么知道我可以用我想要的vector化作业的方式来解释“以后”? 即在我的第一个例子中肯定会总是包含4 ,在第二个例子中,它会打印values[0] ? 很简单的例子: import numpy as np indices = np.zeros(5,dtype=np.int) a[indices] = np.arange(5) a # array([4]) 另一个例子 import numpy as np grid = np.zeros((1000, 800)) # generate indices and values xs = np.random.randint(0, grid.shape[0], 100) ys = np.random.randint(0, grid.shape[1], 100) values = np.random.rand(100) # make sure we have a duplicate index […]

查找numpy数组中相同值序列的长度(运行长度编码)

在一个pylab程序(也可能是一个matlab程序),我有一个代表距离的数字numpy数组: d[t]是在时间t的距离 (和我的数据的时间是len(d)时间单位) 。 我感兴趣的事件是距离低于某个阈值时,我想计算这些事件的持续时间。 很容易得到b = d<threshold的布尔数组,并且问题归结为计算b只包含真值的字的长度序列。 但我不知道如何有效地做到这一点(即使用numpy原语),我走了arrays,并做手动变化检测(即初始化计数器时,从False值为真,增加计数器,只要值为真当值返回到False时,将计数器输出到序列)。 但是这是非常缓慢的。 如何有效地检测numpy数组中的那种序列? 下面是一些说明我的问题的Python代码:第四个点需要很长时间才能出现(如果不是,则增加数组的大小) from pylab import * threshold = 7 print '.' d = 10*rand(10000000) print '.' b = d<threshold print '.' durations=[] for i in xrange(len(b)): if b[i] and (i==0 or not b[i-1]): counter=1 if i>0 and b[i-1] and b[i]: counter+=1 if (b[i-1] and not […]

itertools产品加速

我使用itertools.product来生成长度为13的4个元素的所有可能的变化。4和13可以是任意的,但是,实际上,我得到4 ^ 13个结果,这是很多的。 我需要结果作为一个Numpy数组,目前做到以下几点: c = it.product([1,-1,np.complex(0,1), np.complex(0,-1)], repeat=length) sendbuf = np.array(list(c)) 有了一些简单的剖析代码,它看起来像第一行几乎是瞬间的,而转换到列表然后Numpy数组需要大约3个小时。 有没有办法让这个更快? 这很可能是我忽视的一些事情。 谢谢!

在Python中实现MATLAB的im2col'sliding'

问:如何加快速度? 下面是我的Matlab的im2col '滑动'的实现与附加function返回每第n列。 该函数将图像(或任何2个暗淡的数组)从左到右,从上到下滑动,挑选给定大小的每个重叠的子图像,并返回一个数组,其列是子图像。 import numpy as np def im2col_sliding(image, block_size, skip=1): rows, cols = image.shape horz_blocks = cols – block_size[1] + 1 vert_blocks = rows – block_size[0] + 1 output_vectors = np.zeros((block_size[0] * block_size[1], horz_blocks * vert_blocks)) itr = 0 for v_b in xrange(vert_blocks): for h_b in xrange(horz_blocks): output_vectors[:, itr] = image[v_b: v_b + […]

Numpy修改数组的地方?

我有下面的代码,试图规范mxn数组的值(它将被用作neural network的input,其中m是训练样本的数量, n是特征的数量)。 但是,当我在脚本运行后检查解释器中的数组时,我发现这些值没有正常化; 也就是说,他们仍然具有原始的价值。 我想这是因为函数内部的arrayvariables赋值只能在函数内部看到。 我怎样才能做到这一点正常化? 或者我必须从规范化函数返回一个新的数组? import numpy def normalize(array, imin = -1, imax = 1): """I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)""" dmin = array.min() dmax = array.max() array = imin + (imax – imin)*(array – dmin)/(dmax – dmin) print array[0] def main(): array = numpy.loadtxt('test.csv', delimiter=',', skiprows=1) for column in array.T: normalize(column) return […]

Numpy的`logical_or`为两个以上的参数

Numpy的logical_or函数不超过两个数组进行比较。 我怎样才能find超过两个数组的联合? (关于Numpy的logical_and和获得两个以上数组的交集,可能会问同样的问题。)

NumPy:计算移除NaNs的平均值

我如何计算matrix的matrix平均值,但要从计算中删除nan值? (对于R人,请考虑na.rm = TRUE )。 这是我的[非]工作的例子: import numpy as np dat = np.array([[1, 2, 3], [4, 5, np.nan], [np.nan, 6, np.nan], [np.nan, np.nan, np.nan]]) print(dat) print(dat.mean(1)) # [ 2. nan nan nan] 除去NaN,我的预期产出将是: array([ 2., 4.5, 6., nan])