【问题标题】:Error with scalar and ndarray in python with numpypython中标量和ndarray的错误与numpy
【发布时间】:2012-10-02 13:36:38
【问题描述】:

我有一个小问题,但我无法找到一个简单的答案。我觉得问它很愚蠢。

如何将标量与 numpy.ndarray 相乘?

import fileinput,sys,re,csv,scipy,os,numpy,pylab
from collections import defaultdict
from matplotlib.pyplot import *
from StringIO import StringIO
import numpy as num
a = open("testt.txt", "r")
b=[ raw.strip().split() for raw in a]
c=np.array(b)
d=c.transpose()  
data=np.loadtxt("uu.txt",skiprows=1,dtype=None,delimiter='\t')
t1 = data[:,0]
t=(1/1000)*t1
s = data[:,9]
pylab.plot(t1, s)
pylab.xlabel('time (ms)')
pylab.ylabel('Zone height (mm)')
pylab.grid(True)
pylab.savefig('simple_plot')
pylab.show()

错误在 t=(1/1000)*t1 行中,这给了我错误: TypeError: *: 'int' 和 'numpy.ndarray' 的不支持的操作数类型。文本文件 uu.txt 是一个 60*60 的矩阵,第一行是标题。如果需要,我可以发布它。

谢谢

【问题讨论】:

  • 你能在乘法之前打印t1吗?
  • 我放了 print t1,这是输出:[ 1.09000000e+02 2.19000000e+02 3.28000000e+02 ..., 4.95031000e+05 4.95141000e+05 4.95250000e+05]跨度>

标签: python numpy multidimensional-array


【解决方案1】:

这有点令人惊讶。如果datandarray,那么t1=data[:,0] 也是ndarray,将它乘以一个int 应该没有任何问题。

仍然:

  • 您可以检查t1 的类型及其.shape
  • 您可以强制 t1 成为 ndarray 以防万一:t1=np.asarray(data[:,0])
  • 我很确定您不想计算 (1/1000) 而是 (1./1000)(1/1000)0 凭借整数除法...

【讨论】:

  • (1./1000) 划分这个工作。我仍然不明白初始错误。为什么 1/1000 太小了?我试过 t1=np.asarray(data[:,0]) 但还是一样的错误。
  • 我的理论:ndarray 以错误的dtype 结束(例如str)。例如,2*array([2],dtype=str) 给出了TypeError: unsupported operand type(s) for *: 'int' and 'numpy.ndarray',如果它包含dtype..
  • 顺便说一句,from __future__ import division 也修复了整数除法问题 (1/2 == 0.5)。这是 Python 3 中的默认行为。
猜你喜欢
  • 2014-03-14
  • 2020-09-30
  • 2011-05-02
  • 2015-03-10
  • 2018-10-10
  • 2019-03-06
  • 1970-01-01
  • 2014-03-13
  • 2011-11-25
相关资源
最近更新 更多