形状为 (N,1) 的数组与形状为 (N) 的数组有什么区别?以及两者之间如何转换?

2024-05-01

来自 MATLAB 背景的 Python 新手。

我有一个 1 列数组,我想将该列移到 3 列数组的第一列中。如果我有 MATLAB 背景,我会这样做:

import numpy as np

A = np.zeros([150,3]) #three column array

B = np.ones([150,1]) #one column array which needs to replace the first column of A

#MATLAB-style solution:

A[:,0] = B

然而这不起作用,因为 A 的“形状”是 (150,3),B 的“形状”是 (150,1)。显然,命令 A[:,0] 会产生 (150) 的“形状”。

现在,(150,1) 和 (150) 之间有什么区别?它们不是同一个东西:列向量吗?为什么 Python 不够“聪明”,无法弄清楚我想将列向量 B 放入 A 的第一列中?

有没有一种简单的方法可以将形状为 (N,1) 的 1 列向量转换为形状为 (N) 的 1 列向量?

我是 Python 新手,这似乎是一件非常愚蠢的事情,而 MATLAB 做得更好......


有几件事是不同的。在numpy数组可以是 0d 或 1d 或更高。在 MATLAB 中,2d 是最小的(并且一度是唯一的维度)。 MATLAB 很容易扩展末端的维度,因为它是Fortran ordered. numpy, 默认情况下c ordered,并且最容易扩大前面的尺寸。

In [1]: A = np.zeros([5,3])
In [2]: A[:,0].shape   
Out[2]: (5,)

简单的索引会减少维度,无论它是否A[0,:] or A[:,0]。与 3d MATLAB 矩阵相比,A(1,:,:) v A(:,:,1).

numpy does broadcasting,在求和和赋值等操作期间调整维度。一个基本规则是,如果需要,维度可以自动扩展到一开始:

In [3]: A[:,0] = np.ones(5)
In [4]: A[:,0] = np.ones([1,5])
In [5]: A[:,0] = np.ones([5,1])
...
ValueError: could not broadcast input array from shape (5,1) into shape (5)

它可以改变(5,)LHS 为 (1,5),但无法将其更改为 (5,1)。

另一个广播示例,+:

In [6]: A[:,0] + np.ones(5);
In [7]: A[:,0] + np.ones([1,5]);
In [8]: A[:,0] + np.ones([5,1]);

现在 (5,) 与 (5,1) 一起工作,但那是因为它变成了 (1,5),它与 ​​(5,1) 一起产生 (5,5) - 一个外积广播:

In [9]: (A[:,0] + np.ones([5,1])).shape
Out[9]: (5, 5)

八度音程

>> x = ones(2,3,4);
>> size(x(1,:,:))
ans =
   1   3   4
>> size(x(:,:,1))
ans =
   2   3
>> size(x(:,1,1) )
ans =
   2   1
>> size(x(1,1,:) )
ans =
   1   1   4

要完成您想要的作业,请调整任一侧

以保留维数的方式建立索引:

In [11]: A[:,[0]].shape    
Out[11]: (5, 1)
In [12]: A[:,[0]] = np.ones([5,1])

将 (5,1) 转置为 (1,5):

In [13]: A[:,0] = np.ones([5,1]).T

将 (5,1) 展平/拆解为 (5,):

In [14]: A[:,0] = np.ones([5,1]).flat
In [15]: A[:,0] = np.ones([5,1])[:,0]

squeeze, ravel也工作。

Octave 中的一些快速测试表明,它在尺寸不匹配方面更加宽容。但是numpy优先考虑一致性。一旦理解了广播规则,行为就有意义了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

形状为 (N,1) 的数组与形状为 (N) 的数组有什么区别?以及两者之间如何转换? 的相关文章

随机推荐

  • Symfony 功能测试失败,但相同的请求在浏览器中有效

    我跟着Symfony 文档 http symfony com doc current book testing html functional tests关于功能测试 以便编写我的第一个测试 但我有一些问题 我通过浏览器得到的响应效果很好
  • Heroku:无法访问该网站

    我的 heroku 应用程序在构建后无法访问 日志显示 Web 服务器节点和工作节点都在监听 这是一个由 Gunicorn 运行的 Flask 应用程序 它有 2 个插件 newrelic 和 redistogo Error This si
  • 面临减法时的算法复杂性

    我必须简化以下公式才能获得算法的时间复杂度 n 2 n 3 是否有任何适用的规则可以让我进一步简化这个表达式为更 常见 的 n 2 或类似的东西 我假设这就是结果 可能是错误的 我根本不知道如何处理这里的减法 通常 如果两个值相加 您只考虑
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • 无法在 Dockerfile 中运行 sysctl 命令

    我正在尝试制作我的第一个 dockerfile 我对此很陌生 并且我需要系统来运行命令sysctl w kernel randomize va space 0 它是一个实验室环境 但我收到错误 sysctl 设置键 kernel rando
  • PyPandoc 与 PyInstaller 结合使用

    我安装了 PyInstaller 来为我的 python 脚本创建可执行文件 效果很好 我使用 PyPandoc 创建 docx报告 当正常的 python 文件运行时 它也可以正常运行 但不能从 PyInstaller 生成的可执行文件运
  • Python Flask 将基于经纬度的半径过滤器计算转换为 SQLalchemy

    我目前正在尝试实现半径的计算 我有一个带有房间的数据库 每个房间都有不同的地址以及纬度和经度 用户可以在搜索表单中输入城市名称来搜索该城市的房间 这里我想显示一个结果页面 其中包含搜索城市的房间 搜索城市半径60公里内其他城市的所有房间 H
  • CakePHP GROUP 和 COUNT 个项目在列表中返回

    我知道这里有一些类似的问题 但它们都是关于使用时的 Model gt find all 但这不是我正在做的 我正在做的 Model gt find list 这就是工作与不工作之间的区别 给定一组产品 我想找到该组中的所有品牌以及每个品牌的
  • HttpContext.Current.Request.Form 复选框

    我将表单发布到 MVC 控制器 我想在其中处理用户在类似 html 结构的网格上所做的一些更改 我在视图中为每一行呈现了呈现为简单 HTML 的复选框
  • 未绑定表单字段的验证

    我有一个表单 其中使用 property path gt false 添加了额外的未绑定字段 我想在这个领域进行简单的验证 我发现很多答案建议使用类似的东西 builder gt addValidator 但我发现在 symfony 2 1
  • Juno - Java 构建路径 - 项目无法读取或不是有效的 ZIP 文件

    我收到此错误 说明 资源路径 位置类型 所需库的存档 项目 Home 中的 src Program java 无法读取或无效 ZIP 文件主页 构建路径 构建路径问题 是什么原因导致此错误以及如何修复它 请按照以下导航 Right Clic
  • 为什么 Map.of 不允许空键和空值?

    在 Java 9 中 引入了新的工厂方法List Set and Map接口 这些方法允许使用一行中的值快速实例化 Map 对象 现在 如果我们考虑 Map
  • 我应该如何安全地存储密码并在 chrome 扩展中使用 http auth

    我正在制作一个 chrome 扩展 需要从安全服务器获取 xml 文件 我目前正在使用 XMLHttpRequest 来调用服务器 https username email protected cdn cgi l email protect
  • 如何在执行路由方法之前运行“中间件”函数?

    假设我有一个主干路由器 例如 routes homepage catalog id catalogPage catalog id products id2 productPage homepage gt doStuff catalogPag
  • 我需要 package-lock.json 和 package.json 吗?

    将我的 NPM 更新到最新版本 从 3 X 到 5 2 0 并运行后npm install在现有项目上 我得到一个自动创建的package lock json file 我可以告诉package lock json给我一个精确的依赖树 而不
  • C# 2013 无法创建默认证书。发布中止

    当我尝试运行使用 C 在 Visual Studio 2013 中构建的 exe 时 它 将在我编译它的计算机上运行得很好 当我尝试在不同的计算机上运行该程序时 我收到异常错误 所以我尝试发布该程序 但收到此错误 无法创建默认证书 发布中止
  • laravel 验证 required_with 和 required_with_all 之间有什么区别

    我已经尝试过看看https laravel com docs 5 4 validation https laravel com docs 5 4 validation但我仍然不明白两者之间有什么区别 全部必需 and 必需 无 任何人都可以
  • 如何在Windows窗体代码后面编写方法的单元测试

    我有想要测试的方法 但收到此错误 在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke 现在我还有一个列表框 正在我正在测试的函数中填充 因此 当我将方法分离到另一个类时 这是一个问题 我理解这一点 因为表单需要首先
  • 如何找到某个命令的目录?

    我知道 当您使用 shell 时 唯一可以使用的命令是可以在 PATH 上设置的某些目录中找到的命令 即使我不知道如何查看 PATH 变量上的目录 这是另一个可以回答的好问题 我想知道的是 我来到 shell 并写道 lshw 我想知道 s
  • 形状为 (N,1) 的数组与形状为 (N) 的数组有什么区别?以及两者之间如何转换?

    来自 MATLAB 背景的 Python 新手 我有一个 1 列数组 我想将该列移到 3 列数组的第一列中 如果我有 MATLAB 背景 我会这样做 import numpy as np A np zeros 150 3 three col