在数组中的数据替换过程中,我遇到了一个问题:比如说,
a = [1, 0, 0]
b = [0, 0, 0]
c = [0, 0]
X = numpy.zeros((3, 3, 2))
我有形状为(2,3,2)的矩阵Y,它不是零矩阵。
现在,我想用Y直接等于X的这些元素;
X[tuple(numpy.where(a==0)[0]),
tuple(numpy.where(b==0)[0]),
tuple(numpy.where(c==0)[0])] = Y
我得到了错误shape mismatch: objects cannot be broadcast to a single sha
我有一个大的4D数据集,需要从它创建一个较小的4D数组。我对python相当陌生,并且使用IDL或matlab。我读取我的值,然后使用where函数,从较小的一维数组中找到每个维度所需的索引号。我正在尝试从这些索引数字创建一个新的数组,但是我不断地得到形状不匹配的错误(不能对单个形状进行溴化)。
import numpy as n
import matplotlib.pyplot as plt
import Scientific.IO.NetCDF as S
file=S.NetCDFFile('wspd.mon.mean.nc',mode='r') #Ope
这是一个Python程序,它使用高级索引以三种略有不同的方式对3D数组进行切片,以获得相同的结果。A和b显示在相同的预期结果中。然而,c显示错误消息"IndexError:形状不匹配:索引数组无法与形状(3,) (2,) (1,)一起广播“。a、b和c之间的唯一区别是选择第二索引范围的方式略有不同。为什么会出错:
import numpy as np
y = np.arange(0,18)
y1 = y.reshape((3,2,3))
print("y1 is \n{}\n".format(y1))
#a is ok
a = y1[[0,1,2],:,[Fals
我尝试在Python中通过用2D数组填充来形成3D数组。N是一个根据正在读取的文件而变化的数字。矩阵正在形成为3D,但似乎只有1个‘层’,而我期望它有N个层。似乎N个“层”没有传递到形成的数组中。
import numpy as np
#'rot' is a 3D matrix of shape (N,3,3)
a=np.array(rot[:,0,0])
b=np.array(rot[:,0,1])
c=np.array(rot[:,0,2])
d=np.array(rot[:,1,0])
e=np.array(rot[:,1,1])
f=np.array(rot[:,1,
我正在使用python计算一些东西,但我想让它更快。所以我用了swig。
我想在同一个函数中使用3d数组和4d数组。
swig.i
%apply (double *INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3)\
{(double *trans, int trans_dim1, int trans_dim2, int trans_dim3)};
%apply (double *INPLACE_ARRAY4, int DIM1, int DIM2, int DIM3, int DIM4)\
{(double *sample,int sam_dim1,
我有一个带有130×13的numpy矩阵。假设我想选择一组符合条件和列子集的特定行-
trainx[trainy==label,[0,6]]
上面的代码不工作,并引发错误- IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (43,) (2,).。
但是,如果我在两个步骤中这样做--第一个子集行,然后是列--它可以工作。是不是有什么奇怪的东西是这样工作的?
temp1 = trainx[trainy==label,:]
temp1 = temp1[:,[0,6]]
我有一个3D数组,它是一个遮罩。另外,我有一些索引来编码一些值应该保存在哪里(数组位置)。 一切似乎都很正常,除了在将值分配到所需位置后输出矩阵仍然是空的。 我看不到我在这里遗漏了什么。我也尝试过numpy.put,但没有成功。 import numpy as np
# Initialize output matrix (here the results will be stored)
results = np.zeros((67, 67, 45))
# define the mask - where to put the calculated values in the results
我试图创建一个形状Nx3的矩阵,其中N是不知道的。这就是我想要做的:
F = np.array([[],[],[]])
for contact in contacts:
xp,yp,theta = contact
# Create vectors for points and normal
P = [xp, yp, 0]
N = [np.cos(theta), np.sin(theta), 0]
# Calculate vector product
cross_PN = np.cro
我编写了一个函数来查看矩阵是否对称:
def issymmetric(mat):
if(mat.shape[0]!=mat.shape[1]):
return 0
for i in range(mat.shape[0]):
for j in range(i):
if (mat[i][j]!=mat[j][i]):
return 0
return 1
它适用于内置的ndarray,例如numpy.ones:
import numpy as np
a=np.ones((5,5), int
在本例中,我正在设置一个3D框,即2x2x3。我使用列表理解来设置框中每个1x1x1单元格的质心坐标(我使用的是Python2.7)。然后,我将该列表结构转换为一个numpy数组,并希望随机填充该框的一半。
import numpy as np
tube = []
xy = 2
for z in range(3):
tube.append([(x+0.5, y+0.5, z+0.5, 0) for x in range(xy) for y in range(xy)])
centroid = np.array(tube)
exitFlag = False
我定义了一个二维数组如下:
predict_result = np.zeros((69,1000))
在循环中,我试图将一个预测的一维数组注入其中。
for ij in range(0,1000):
# # some code to generate Ypredict
predict_result[:,ij]=Ypredict
Ypredict总是(69,1)的形状。但是,运行该程序会出现以下错误
predict_result:,ij=Ypredict ValueError:无法广播输入数组从形状(69,1)到形状(69)
如何纠正此错误?
在NumPy中有两个4d矩阵,它们的高度、宽度和深度是相同的。
x = np.random.random((125,3,4,4)).astype(np.float32)
y = np.random.random((14,3,4,4)).astype(np.float32)
我想把x中的每个三维矩阵与y中的每个3d矩阵相乘,这样得到的结果是一个5d矩阵,其形状为res[x.shape,y.shape,.]。目前,我正在遵循此代码。
xb,xd,xh,xw = x.shape
yb,yd,yh,yw = y.shape
res = np.zeros((xb,yb,xd,xh,xw))
for i
我正在尝试将一段“for”循环代码从Matlab转换到Python。在这个块中有一个语句:A[B]=C。这三个A,B和C都是矩阵。在python中,由于Matlab和Python之间索引标准的不同,我需要编写为A[B-1]=C。当B是非空的时候,这个语句在python中很好。但是,如果B为空,则该语句如下所示:
A11 = np.copy(A[:,B-1]) #Remind that B is an empty matrix, like B=np.array([0])
索引错误:用作索引的数组必须是整数(或布尔型)类型的
实际上,如果B是空的,那么对于矩阵A11,我想要的只是另一个空矩阵。当然
我正在将一些matlab代码转换为python。我使用一个表示为h x w x d数组的3d体积块,我正在使用SO 中的函数从这个体积中提取更小的3d面片。所以,如果我有32x32x32数组,并提取16x16x16补丁,在处理完每个补丁后,我最终得到了一个形状(2, 2, 2, 16, 16, 16),我想把它放回形状,基本上是反转h x w x d,不循环每个维度的惯用window_nd方法是什么?由于我还需要处理2d和4d数据,因此我希望避免为每个维度创建函数。