相关疑难解决方法(0)

Numpy:x和y数组的笛卡尔积指向单个2D点阵列

我有两个numpy数组,定义网格的x和y轴.例如:

x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)

我想生成这些数组的笛卡尔积来生成:

array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)

在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.

python numpy cartesian-product

134
推荐指数
8
解决办法
5万
查看次数

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

使用沿给定维度的(n-1)维数组访问n维数组的最优雅方法是什么,如虚拟示例中所示

a = np.random.random_sample((3,4,4))
b = np.random.random_sample((3,4,4))
idx = np.argmax(a, axis=0)
Run Code Online (Sandbox Code Playgroud)

我现在如何访问idx a以获得最大值,a就像我使用过一样a.max(axis=0)?或者如何检索idxin中指定的值b

我想过使用,np.meshgrid但我认为这是一种矫枉过正.请注意,尺寸axis可以是任何有用的轴(0,1,2),并且事先不知道.有一种优雅的方式来做到这一点?

python numpy

13
推荐指数
1
解决办法
1317
查看次数

如何恢复平坦的Numpy数组的原始索引?

我有一个多维numpy数组,试图将其粘贴到熊猫数据框中。我想展平数组,并创建一个反映预展平数组索引的熊猫索引。

请注意,我使用3D来缩小示例,但我想将其推广到至少4D

A = np.random.rand(2,3,4)
array([[[ 0.43793885,  0.40078139,  0.48078691,  0.05334248],
    [ 0.76331509,  0.82514441,  0.86169078,  0.86496111],
    [ 0.75572665,  0.80860943,  0.79995337,  0.63123724]],

   [[ 0.20648946,  0.57042315,  0.71777265,  0.34155005],
    [ 0.30843717,  0.39381407,  0.12623462,  0.93481552],
    [ 0.3267771 ,  0.64097038,  0.30405215,  0.57726629]]])

df = pd.DataFrame(A.flatten())
Run Code Online (Sandbox Code Playgroud)

我正在尝试生成像这样的x / y / z列:

           A  z  y  x
0   0.437939  0  0  0
1   0.400781  0  0  1
2   0.480787  0  0  2
3   0.053342  0  0  3
4   0.763315  0  1  0
5   0.825144  0  1  1
6   0.861691 …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

6
推荐指数
1
解决办法
1654
查看次数

使用NumPy从另一个数组及其索引创建2D数组

给定一个数组:

arr = np.array([[1, 3, 7], [4, 9, 8]]); arr

array([[1, 3, 7],
       [4, 9, 8]])
Run Code Online (Sandbox Code Playgroud)

并给出其索引:

np.indices(arr.shape)

array([[[0, 0, 0],
        [1, 1, 1]],

       [[0, 1, 2],
        [0, 1, 2]]])
Run Code Online (Sandbox Code Playgroud)

如何将它们整齐地堆叠在一起以形成新的2D​​阵列?这就是我想要的:

array([[0, 0, 1],
       [0, 1, 3],
       [0, 2, 7],
       [1, 0, 4],
       [1, 1, 9],
       [1, 2, 8]])
Run Code Online (Sandbox Code Playgroud)

这是我目前的解决方案:

def foo(arr):
    return np.hstack((np.indices(arr.shape).reshape(2, arr.size).T, arr.reshape(-1, 1)))
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是执行此操作是否更短/更优雅?

python arrays numpy

5
推荐指数
1
解决办法
382
查看次数

如何在numpy中创建一个增加的多维数组

我试图在给出单应矩阵的情况下执行逆变形,为了有效地做到这一点,我需要一个看起来像这样的numpy数组:

([[0, 0, 1], [0, 1, 1], [0, 2, 1], ... [1, 0, 1], [1, 1, 1], ... [n, p, 1]])
Run Code Online (Sandbox Code Playgroud)

其中n是图像的宽度(im.shape[0]),p是图像的高度(im.shape[1]).关于如何有效地构建看起来那样的numpy数组的任何想法?

编辑:

有一些讨论哪个是最快的,如果有人有任何信息,我认为听起来很有趣.我感谢大家的帮助!

python arrays opencv numpy

4
推荐指数
1
解决办法
431
查看次数

使用numpy创建特定的数组

我想用numpy创建这种数组:

[[[0,0,0], [1,0,0], ..., [1919,0,0]],
 [[0,1,0], [1,1,0], ..., [1919,1,0]],
 ...,
 [[0,1019,0], [1,1019,0], ..., [1919,1019,0]]]
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式访问:

>>> data[25][37]
array([25, 37, 0])
Run Code Online (Sandbox Code Playgroud)

我试过用这种方式创建一个数组,但它并不完整:

>>> data = np.mgrid[0:1920:1, 0:1080:1].swapaxes(0,2).swapaxes(0,1)
>>> data[25][37]
array([25, 37])
Run Code Online (Sandbox Code Playgroud)

你知道怎么用numpy解决这个问题吗?

python numpy

2
推荐指数
2
解决办法
104
查看次数

标签 统计

numpy ×6

python ×6

arrays ×2

cartesian-product ×1

dataframe ×1

opencv ×1

pandas ×1