来自Matlab/Octave的背景,我一直在努力学习numpy。一件让我一次又一次地被绊倒的事情是向量和多维数组之间的区别。对于这个问题,我会给出一个具体的问题,但是如果有人也能解释一下numpy中一维数组背后的更一般的图片,为什么你首先想要它们,如何避免在混合单维数组和多维数组时遇到麻烦,等等,我会非常感激。总之,问题是:
我有一个叫做X的二维数组:
X = numpy.arange(10).reshape(2,5)
我想把X的最后一列存储成另一个二维数组(也就是一个列向量),叫做Y。我唯一能想到的方法是:
Y = numpy.atleast_2d(X[:,4]).T
但我不喜欢这样有几个
注:我不确定这是否重复--请告诉我是否是(并结束问题)。
如果有一个一维NumPy数组vector,那么如果您编写表单的for循环:
for element in vector :
print(element)
结果将打印NumPy数组的每个元素。
如果有一个二维NumPy数组matrix,那么如果您编写表单的for循环:
for vector in matrix :
print(vector)
结果将打印二维NumPy数组的每一行,即打印一维NumPy数组,而不是单独打印数组的每个元素。
但是,如果将for循环写为:
import numpy
for element in n
我有两个numpy数组:
import numpy as np
A = np.random.rand(20).reshape(-1, 2)
B = np.random.rand(8).reshape(-1, 2)
其中列在二维欧几里得空间中可视为x和y坐标。对于A的每一行,我需要计算从存储在B中的所有点的最小距离。我的真实数据很大,我需要关心速度。在numpy中最有效的方法是什么?
当我使用numpy.ndarray调用itemgetter时,会得到一个tuple。
In [1]: import numpy as np
In [2]: import operator as op
In [3]: ar = np.array([1,2,3,4,5])
In [4]: op.itemgette
情况如下:
我有一个二维的数字阵列。其形状为(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.
当我在numpy中创建一个一维数组并使用一个字符串(包含数字)对其进行索引时,我会得到一个预期的错误:
>>> import numpy as np
>>> a = np.arange(15)
>>> a['10']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: field named 10 not found.
但是,当我创建一个二维数组并使用两个字符串进行索引
考虑下面这个简单的例子:
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.ix_为二维值空间生成多维索引。但是,我需要使用一个子索引来查找一维索引。例如,
assert subindex.shape == (ny, nx)
data = np.random.random(size=(ny,nx))
# Generator returning the index tuples
def get_idx(ny,nx,subindex):
for y in range(ny):
for x in range(nx):
yi = y # This
我想执行一个索引操作,比如
ix = [(1,2),(3,4),(5,6)]
ar[ix] # this is invalid real life
这就给了我一维数组
array([ar[1,2], ar[3,4], ar[5,6]])
换句话说,我想指定一组坐标,并在这些坐标处得到一个值向量。这不是一项工作,我对索引ix、对列表、对列表、二维数组的精确性不太在意,pandas.DataFrame很好。我有兴趣在numpy数组和Pandas DataFrames上都这样做。
我试着用嵌套循环在二维数组中进行赋值。我尝试访问数组的元素,如下所示。但我弄错了。我找过了,但没找到结果。如何在二维数组中赋值Julia?
for x in 1:total
for y in 1:W
@show (x, y)
if agirliklar[x] <= y
V[x][y] = getMax(V[x-1][y], degerler[x] + V[x-1][y - agirliklar[x]])
else
print(&
我的问题是关于在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列中的值。
我有一些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数组。当然,我可以为其他维度编写更多