情况如下:
我有一个二维的数字阵列。其形状为(1002,1004)。每个元素包含介于0和Inf之间的值。我现在要做的是确定前1000个最大值,并将相应的索引存储到一个名为x的列表中,以及一个名为y的列表中,这是因为我想绘制最大值,而这些索引实际上对应于这个值的实时x和y位置。
到目前为止,我得到的是:
x = numpy.zeros(500)
y = numpy.zeros(500)
for idx in range(500):
x[idx] = numpy.unravel_index(full.argmax(), full.shape)[0]
y[idx] = numpy.
我有一个名为check_sum的函数,它将一个二维数组的所有元素相加。 Grid是一个二维数组,grid_shape是1024x1024。 我正在尝试使用numpy.matrix.sum函数,但在多次尝试之后,我不知道如何实现它,它总是给我另一个值。 def check_sum(grid):
xmax, ymax = grid_shape
s=0
for i in range(xmax):
for j in range(ymax):
s += grid[i][j]
return s
我的理解是numpy中的一维数组可以解释为面向列的向量或面向行的向量。例如,具有形状(8,)的一维阵列可以被视为取决于上下文的形状(1,8)或形状(8,1)的二维阵列。
我遇到的问题是,我编写的操作数组的函数在2-D情况下倾向于很好地处理向量和矩阵,但在1-D情况下就不太好了。
因此,我的函数最终会执行如下操作:
if arr.ndim == 1:
# Do it this way
else:
# Do it that way
或者甚至是这样:
# Reshape the 1-D array to a 2-D array
if arr.ndim == 1:
arr =
我正在处理netcdf文件中的数据,多维变量,读取到numpy数组中。我需要扫描所有维度(numpy中的轴)中的所有值,并修改一些值。但是,我不知道任何给定变量的维数。当然,在运行时,我可以获得numpy数组的ndim和形状。如何在不预先知道维度或形状的情况下,通过所有值编写一个循环?如果我知道一个变量正好是二维,我会这样做。
shp=myarray.shape
for i in range(shp[0]):
for j in range(shp[1]):
do_something(myarray[i][j])
我在散点图上有很多数据--最终结果将有几百万点。在散点图上,这是太多了--我想把它转换成二维直方图,绘制等高线图,如这里所描述的。
这与我正在使用的代码相似,并且有同样的问题
import numpy
import matplotlib.pyplot as pyplot
def convert_edges_to_centres(edges):
centres = numpy.empty(len(edges)-1)
for i in range(len(centres)):
centres[i] = (edges[i+1] - edges[i])/2 + ed
我得到了二维数组A和B,它们是相同的,但通过两种不同的方法获得。考虑以下几行: In [1]: (A==B).all()
Out [1]: True
In [2]: A.shape
Out [2]: (500, 10805)
In [3]: B.shape
Out [3]: (500, 10805)
In [4]: numpy.mean(A,axis=1)[0]
Out [4]: -0.006108739586784807
In [5]: numpy.mean(A[0,:])
Out [5]: -0.006108739586784786
In [6]: numpy.mean(B,
为了简单起见,我需要在二维数组中的连续列上执行一些计算,比方说子指令。
我目前通过以下方式做到这一点:
c = np.array([(a[i, j + 1] - a[i, j]) for j in range(a.shape[1] - 1) for i in range(a.shape[0])]).reshape(a.shape[0], a.shape[1] - 1)
但我怀疑一定有更好的方法来使用NumPy的向量操作,而不需要迭代超过2个值和重塑。
我得到了一些我无法解释的效率测试结果。
我想要组装一个矩阵B,它的第一个条目Bi,::= Ai,:,:.dot( x ),其中每个Ai,:,:是一个2D矩阵,x也是。
我可以通过以下三种方法来测试性能:随机(numpy.random.randn)矩阵A= (10,1000,1000),x= (1000,1200)。我得到的时间结果如下:
(1)单多维点积
B = A.dot(x)
total time: 102.361 s
(2)通过I循环,实现二维点积。
# initialize B = np.zeros([dim1, dim2, dim3])
for i in range(A
我有三个numpy 2D数组:
A1 with the shape of (x * y)
A2 with the shape of (x * z)
A3 with the shape of (y * z)
这三个数组中的值要么是True,要么是False。现在,我希望创建一个形状的三维数组(x *y* z),以便3D数组中的每个元素如下所示:
3D_array[x, y, z] = A1[x, y] & A2[x, z] & A3[y, z]
我知道我可以做一个循环。但是有什么更快的方法吗?像通过矢量化?
或者,这三个二维数组实际上只是三个一维数组之间的某种成对交互作用。因此,
我想要创建一个numpy array,以便用numpy arrays填充它。例如:
a = [] (simple array or numpy array)
b = np.array([[5,3],[7,9],[3,8],[2,1]])
a = np.concatenate([a,b])
c = np.array([[1,2],[2,9],[3,0]])
a = np.concatenate([a,c])
我想这样做,因为我有wav文件,我从中提取一些特性,所以我不能同时从2个文件中读取,但可以迭代地读取。如何在二维固定的情况下创建一个空的ndarray,例如a.shape = (x,2),
我有一些python代码,它目前与二维数组硬连接在一起,如下所示:
import numpy as np
data = np.random.rand(5, 5)
width = 3
for y in range(0, data.shape[1] - W + 1):
for x in range(0, data.shape[0] - W + 1):
block = data[x:x+W, y:y+W]
# Do something with this block
现在,这对于二维数组是硬编码的,我想将其扩展到3D和4D数组。当然,我可以为其他维度编写更多
我的问题是关于在numpy中的数组切片。以下行为的逻辑是什么?
x = arange(25)
x.shape = (5, 5)
# This results in a 2-d array in which rows and columns are excerpted from x
y = x[0:2, 0:2]
# But this results in a 1-d array
y2 = x[0:2, 0]
我本来希望y2是一个二维数组,它包含0和1列中的值。
有没有一种方法可以从numpy数组中按元素进行属性提取?例如,假设我有:
import numpy as np
class foo():
def __init__(self, value):
self.bar = value
obj_array = np.empty((2, 2), dtype='object')
for i in range(obj_array.shape[0]):
for j in range(obj_array.shape[1]):
obj_array[i, j] = foo(i+j)
bar_arra
考虑下面这个简单的例子:
X = numpy.zeros([10, 4]) # 2D array
x = numpy.arange(0,10) # 1D array
X[:,0] = x # WORKS
X[:,0:1] = x # returns ERROR:
# ValueError: could not broadcast input array from shape (10) into shape (10,1)
X[:,0:1] = (x.reshape(-1, 1)) # WORKS
有人能解释为什么numpy有形状为(N,)而不是(N,1)的向量吗?从一维数组到二
我有一个大的二维numpy数组a的字符(dtype='a1'),并希望找到始终包含相同字符的不变列。下面的代码可以工作,但是非常慢。
var_col = np.zeros(a.shape[1], dtype='bool')
for c in xrange(a.shape[1]):
if not all(a[:,c] == a[0,c]):
var_col[c] = True
这个问题有更快的解决办法吗?谢谢!
假设我有一个从0到1范围内的二维Numpy数组,它表示一个灰度图像。然后如何将其转换为PIL Image对象?到目前为止,所有的尝试都产生了非常奇怪的散乱像素或黑色图像。
for x in range(image.shape[0]):
for y in range(image.shape[1]):
image[y][x] = numpy.uint8(255 * (image[x][y] - min) / (max - min))
#Create a PIL image.
img = Image.fromarray(image, 'L')
在上面的代码中
是否有一个numpy函数来确保一维或二维数组成为列或行向量?
例如,我有以下任何一个向量/列表。将任何输入转换为列向量的最简单方法是什么?
x1 = np.array(range(5))
x2 = x1[np.newaxis, :]
x3 = x1[:, np.newaxis]
def ensureCol1D(x):
# The input is either a 0D list or 1D.
assert(len(x.shape)==1 or (len(x.shape)==2 and 1 in x.shape))
x = np.atleast_2d(x)
n