python - MatLab 到 Python 的转换 - 索引?
问题描述
我正在尝试将以下 MatLab 代码转换为 Python:
for i = 1:n
I = (sum((N==M(1,i))+(N==M(2,i)))==2);
P(:,i) = pit(:,I);
这是我目前的尝试:
for i in range(0,n):
I = [sum(int(N == M)(1,i)) + int((int(N == M)(2,i))) == 2]
这引发了错误:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
我已经翻译的以下 Python 代码(我认为是正确的)在我正在努力解决的代码之前:
M = np.array(mypitches).transpose()
n = M.size
P = np.zeros((3,n))
pit = pitches(h,-8,12)
N = np.array(['Fb','Cb','Gb','Db','Ab','Eb','Bb','F-','C-','G-','D-','A-','E-','B-','F#','C#','G#','D#','A#','E#','B#']).transpose()
完整的 MatLab 代码:
function [P] = position(h,mypitches);
% position.m : gives pitch positions given
% h = aspect ratio
% mypitches = a list of pitch names from Fb-B#
% returns
% P = a list of corresponding pc spiral positions
%
% created by EC, 20 Nov 1998; updated 28 Aug 2013
%
% usage: [P] = position(mypitches)
% example: position(['Bb';'C-']);
M = mypitches';
[m,n] = size(M);
P = zeros(3,n);
pit = pitches2(h,-8,12);
N = ['Fb';'Cb';'Gb';'Db';'Ab';'Eb';'Bb';'F-';'C-';'G-';'D-';'A-';'E-';'B-';'F#';'C#';'G#';'D#';'A#';'E#';'B#']';
for i = 1:n
I = (sum((N==M(1,i))+(N==M(2,i)))==2);
P(:,i) = pit(:,I);
end;
解决方案
看起来你正在尝试这样做。ndarray 索引是错误的。
for i in range(n):
I = (sum(int(N == M[0, i]) + int(N == M[1, i])) == 2)
P[:, i] = pit[:, I]
它可以写得更清楚一点
for i in range(n):
I = (N == M[0, i] == M[1, i]) # True is equivalent to 1 and False 0
P[:, i] = pit[:, I]
推荐阅读
- javascript - React Native 和 Apollo:找不到变量:文档
- java - GridPane 元素最初超出边界,仅在调整窗口大小后才卡入到位
- flutter - 有没有办法在颤动中自动单击按钮?
- python - 如何在 PyCharm 远程 SSH 解释器 (SFTP) 中使用 opencv 使用网络摄像头 - Python
- bots - 是否可以创建一个松弛的日期时间选择器元素?
- android - ionic cordova android build error(cordova.cmd build android exited with exit code 1)
- arrays - 如何在 Python 中打印这个二维数组
- javascript - Javascript在循环中添加多个数组
- javascript - Phaser.js 街机物理重叠不起作用
- go - 从 bigquery 开放数据库查询 IP 地理位置数据:geolite2